java poi 往xlsx写数据为空

今天遇到一个有趣的问题,不报任何异常, 程序跑完了,居然没往excel里写数据

后来 将SXSSFWorkbook改为XSSFWorkbook才成功!!!

  /**
     * 向已存在的excel中追加数据
     *
     * @param absolutePath 已存在的excel绝对路径
     * @param sheetName   sheet的序号,从0开始
     * @param dataList     cell数据
     * @return
     * @throws IOException
     */
    public static Boolean addExcel(String absolutePath, String sheetName, List<String[]> dataList) throws IOException {
        XSSFWorkbook   wb = null;
        FileOutputStream out = null;
        FileInputStream fileInputStream = null;

        try{
            int columnsNum = dataList.get(0).length;
             fileInputStream = new FileInputStream(absolutePath);

            wb = new XSSFWorkbook();
            wb = (XSSFWorkbook) WorkbookFactory.create(fileInputStream);
            Sheet  sheet =wb.getSheet(sheetName);
            out = new FileOutputStream(absolutePath);
            Row row;
            int lastRowNum = sheet.getLastRowNum();
            for (int i = 0; i < dataList.size(); i++) {
                //row = sheet.createRow(++lastRowNum);
                row = sheet.getRow(++lastRowNum);
                if (row == null) {
                    row = sheet.createRow(lastRowNum);
                }
                String[] addOneRowData = dataList.get(i);
                for (int j = 0; j < addOneRowData.length; j++) {
                    String str = addOneRowData[j];
                    row.createCell(j).setCellValue(str);
                }
            }
            out.flush();
            wb.write(out);

        }catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (fileInputStream != null) {
                fileInputStream.close();
            }
            if (wb != null) {
                //wb.dispose();// 删除临时文件,很重要,否则磁盘可能会被写满
            }
            try {
                if(out != null) {
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if(wb != null) {
                    wb.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return true;
    }

那他们的区别

HSSFworkbook,XSSFworkbook,SXSSFworkbook区别总结_千百元的博客-CSDN博客用JavaPOI导出Excel时,我们需要考虑到Excel版本及数据量的问题。针对不同的Excel版本,要采用不同的工具类,如果使用错了,会出现错误信息。JavaPOI导出Excel有三种形式,他们分别是1.HSSFWorkbook 2.XSSFWorkbook3.SXSSFWorkbook。HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls;XSSFWorkbook:是操作Excel2007后的版本,扩展名是.xlsx;SXSSFWorkboo...https://blog.csdn.net/liuming690452074/article/details/125056360?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22125056360%22%2C%22source%22%3A%22liuming690452074%22%7D&ctrtid=x8TUz

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java调用POI生成XLSX表格并入本地的示例代码: ```java import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelWriter { public static void main(String[] args) throws IOException { // 创建工作簿 XSSFWorkbook workbook = new XSSFWorkbook(); // 创建工作表 XSSFSheet sheet = workbook.createSheet("Sheet1"); // 创建标题行 XSSFRow titleRow = sheet.createRow(0); // 设置标题行样式 XSSFCellStyle titleCellStyle = workbook.createCellStyle(); titleCellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 创建标题单元格并设置样式和值 XSSFCell titleCell = titleRow.createCell(0); titleCell.setCellStyle(titleCellStyle); titleCell.setCellValue("姓名"); titleCell = titleRow.createCell(1); titleCell.setCellStyle(titleCellStyle); titleCell.setCellValue("年龄"); titleCell = titleRow.createCell(2); titleCell.setCellStyle(titleCellStyle); titleCell.setCellValue("性别"); // 创建数据行 for (int i = 1; i <= 3; i++) { XSSFRow dataRow = sheet.createRow(i); // 创建数据单元格并设置值 XSSFCell dataCell = dataRow.createCell(0); dataCell.setCellValue("张三" + i); dataCell = dataRow.createCell(1); dataCell.setCellValue(20 + i); dataCell = dataRow.createCell(2); dataCell.setCellValue("男"); } // 保存工作簿到本地文件 FileOutputStream fos = new FileOutputStream("test.xlsx"); workbook.write(fos); fos.close(); // 释放工作簿资源 workbook.close(); } } ``` 该示例代码生成了一个包含标题行和3行数据XLSX表格,并保存到本地文件test.xlsx中。可以根据需要修改表格的标题、数据和样式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值