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

如何使用Apache POI实现Excel按列写入数据?

如何使用Apache POI按列向Excel写入数据?

我想要按列向Excel文件写入数据,但不清楚具体实现方法,请问该需求是否可以实现?我查阅了官方文档,未找到直接按列写入的方法。以下是我的代码:

private void writeColumnByColumn() throws IOException {
    XSSFWorkbook workbook = new XSSFWorkbook();
    XSSFSheet sheet = workbook.createSheet();
    String[] strings = {"a", "b", "c"};
    Row row = sheet.createRow(0);
    for (int i = 0; i < 3; i++) {
        // 此处我希望将"a"写入第一列、"b"写入第二列、"c"写入第三列
    }
    FileOutputStream outputStream = new FileOutputStream("ok.xlsx");
    try (outputStream) {
        workbook.write(outputStream);
    }
}

请指导我如何修改代码以实现按列写入的功能。


当然可以实现这个需求!Apache POI的Excel操作模型是行优先的,但这完全不影响我们按列的逻辑写入数据——本质上就是在指定行的不同列位置创建单元格并赋值就行。

你只需要在循环里,针对当前的索引i,在已经创建好的行row上创建对应列的单元格,然后把数组里的元素赋值给它。修改后的完整代码如下:

private void writeColumnByColumn() throws IOException {
    XSSFWorkbook workbook = new XSSFWorkbook();
    XSSFSheet sheet = workbook.createSheet();
    String[] strings = {"a", "b", "c"};
    Row row = sheet.createRow(0);
    
    for (int i = 0; i < strings.length; i++) {
        // POI中列索引从0开始,i=0对应Excel的A列(第一列)
        Cell cell = row.createCell(i);
        // 将数组中对应位置的内容写入单元格
        cell.setCellValue(strings[i]);
    }
    
    // 用try-with-resources自动管理输出流,避免资源泄漏
    try (FileOutputStream outputStream = new FileOutputStream("ok.xlsx")) {
        workbook.write(outputStream);
    }
    // 显式关闭workbook,释放资源
    workbook.close();
}

额外补充说明:

  • 如果你的需求是多行多列的按列写入(比如第一列依次写入a、d、g,第二列写入b、e、h),只需要嵌套循环创建行和对应列的单元格即可,示例代码如下:
    // 模拟按列组织的数据:第一列[a,d,g],第二列[b,e,h],第三列[c,f,i]
    String[][] columnData = {{"a", "d", "g"}, {"b", "e", "h"}, {"c", "f", "i"}};
    
    for (int colIndex = 0; colIndex < columnData.length; colIndex++) {
        String[] columnValues = columnData[colIndex];
        for (int rowIndex = 0; rowIndex < columnValues.length; rowIndex++) {
            // 获取或创建当前行
            Row row = sheet.getRow(rowIndex);
            if (row == null) {
                row = sheet.createRow(rowIndex);
            }
            // 创建当前列的单元格并赋值
            Cell cell = row.createCell(colIndex);
            cell.setCellValue(columnValues[rowIndex]);
        }
    }
    
  • 注意POI中的行和列索引都是从0开始的,和Excel界面中显示的1开头序号要对应好,避免位置错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 08:07:30