POI 追加写入excel.

这篇博客介绍了如何使用Apache POI库在已有Excel文件的末尾追加新的数据行。通过创建HSSFWorkbook对象,获取工作表,然后创建新行并设置单元格值,实现了对Excel的追加写入操作。示例代码展示了如何打开文件,追加数据,然后保存到原文件。
  1. poi操作excel ,摘自 :http://blog.youkuaiyun.com/goodleiwei/article/details/7247339
  2. 记录以下,留后面验证:
  3. public class TestExceL{    
  4.   
  5.     public static void main(String[] args) throws Exception {    
  6.         FileInputStream fs=new FileInputStream("d://test.xls");  //获取d://test.xls  
  7.         POIFSFileSystem ps=new POIFSFileSystem(fs);  //使用POI提供的方法得到excel的信息  
  8.         HSSFWorkbook wb=new HSSFWorkbook(ps);    
  9.         HSSFSheet sheet=wb.getSheetAt(0);  //获取到工作表,因为一个excel可能有多个工作表  
  10.         HSSFRow row=sheet.getRow(0);  //获取第一行(excel中的行默认从0开始,所以这就是为什么,一个excel必须有字段列头),即,字段列头,便于赋值  
  11.         System.out.println(sheet.getLastRowNum()+" "+row.getLastCellNum());  //分别得到最后一行的行号,和一条记录的最后一个单元格  
  12.           
  13.         FileOutputStream out=new FileOutputStream("d://test.xls");  //向d://test.xls中写数据  
  14.         row=sheet.createRow((short)(sheet.getLastRowNum()+1)); //在现有行号后追加数据  
  15.         row.createCell(0).setCellValue("leilei"); //设置第一个(从0开始)单元格的数据  
  16.         row.createCell(1).setCellValue(24); //设置第二个(从0开始)单元格的数据  
  17.   
  18.           
  19.         out.flush();  
  20.         wb.write(out);    
  21.         out.close();    
  22.         System.out.println(row.getPhysicalNumberOfCells()+" "+row.getLastCellNum());    
  23.     }    
  24. }   

 

### 使用Apache POI实现Java中批次多次向现有Excel文件追加数据 为了实现在Java中使用Apache POI批多次向现有的Excel文件追加数据,可以按照如下方式操作: #### 准备工作 确保项目环境中已引入必要的依赖项。由于Hutool-poi并不自带POI库,需单独添加POI及相关组件的Maven依赖[^1]。 ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>5.2.3</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency> ``` #### 实现逻辑 创建一个工具类`BatchAppendToExcelUtil.java`来处理批量追加记录的任务。此工具类负责打开已有Excel文档、定位到最后一条记录的位置并继续写入新条目。 ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import java.io.FileInputStream; import java.io.FileOutputStream; public class BatchAppendToExcelUtil { public static void appendData(String filePath, List<String[]> dataList) throws Exception { FileInputStream fis = new FileInputStream(filePath); Workbook workbook = null; try (FileInputStream fs = new FileInputStream(filePath)) { if (filePath.endsWith(".xlsx")) { workbook = new SXSSFWorkbook(new XSSFWorkbook(fs)); } else if (filePath.endsWith(".xls")) { throw new UnsupportedOperationException("Only .xlsx format is supported."); } Sheet sheet = workbook.getSheetAt(0); int lastRowNum = sheet.getLastRowNum(); for (String[] data : dataList) { Row row = sheet.createRow(++lastRowNum); for (int i = 0; i < data.length; ++i) { Cell cell = row.createCell(i); cell.setCellValue(data[i]); } } FileOutputStream fos = new FileOutputStream(filePath); ((SXSSFWorkbook)workbook).write(fos); ((SXSSFWorkbook)workbook).dispose(); // 清理临时文件 fos.close(); } finally { if(workbook != null){ workbook.close(); } fis.close(); } } } ``` 上述代码片段展示了如何利用`SXSSFWorkbook`流式写入大量数据至`.xlsx`类型的Excel文件中,并且每次调用该函数都会基于当前文件状态进行增量更新而不是覆盖原有内容[^2]。 注意:对于`.xls`格式的支持已被移除,因为其最大行数有限制(65536),而现代应用更倾向于采用无此类限制的新版本`.xlsx`格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值