You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Apache POI读取xlsm文件并另存为xlsx文件

使用Apache POI读取.xlsm并另存为.xlsx的实现方案

嘿,作为刚接触Excel和Apache POI的新手,这个需求其实挺常见的,我来一步步给你讲清楚怎么实现,还有完整的可运行代码示例~

一、核心逻辑

.xlsm本质上是带宏的OOXML格式Excel文件,和.xlsx同属于XSSF的处理范畴。我们只需要用XSSFWorkbook加载.xlsm文件,然后直接将其写入为.xlsx格式即可——POI会自动移除宏相关的内容,因为.xlsx本身不支持宏。

二、必要依赖(Maven)

首先确保你的项目中引入了Apache POI的核心和OOXML依赖,这里以常用的5.2.5版本为例:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.5</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.5</version>
</dependency>

如果用Gradle的话,对应依赖如下:

implementation 'org.apache.poi:poi:5.2.5'
implementation 'org.apache.poi:poi-ooxml:5.2.5'

三、完整代码示例

下面是一个简洁的转换工具类,注释已经写得很详细,新手也能轻松理解:

import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class XlsmToXlsxConverter {
    public static void main(String[] args) {
        // 替换成你自己的输入输出文件路径
        String xlsmFilePath = "your/input/path/sample.xlsm";
        String xlsxFilePath = "your/output/path/sample.xlsx";

        // 使用try-with-resources自动关闭流,避免资源泄漏
        try (FileInputStream inputStream = new FileInputStream(xlsmFilePath);
             XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
             FileOutputStream outputStream = new FileOutputStream(xlsxFilePath)) {

            // 直接写入文件,POI会自动处理宏的移除
            workbook.write(outputStream);
            System.out.println("转换成功!.xlsm已保存为.xlsx格式");

        } catch (IOException e) {
            e.printStackTrace();
            System.err.println("转换出错:" + e.getMessage());
        }
    }
}

四、关键注意事项

  • 宏丢失说明:转换后的.xlsx文件会丢失所有宏,这是.xlsx格式的特性决定的,如果需要保留宏,只能继续使用.xlsm格式。
  • 版本兼容性:尽量使用较新的POI版本(比如5.x),旧版本可能对某些.xlsm文件的兼容性较差。
  • 大文件优化:如果处理非常大的.xlsm文件,建议使用SXSSFWorkbook(流式处理)来避免内存溢出,不过对于新手来说,先从XSSFWorkbook入门即可。

内容的提问来源于stack exchange,提问作者Kuan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:49:58