在Java中使用模板创buildExcel表格,新版本的Excel

我发现下面的代码来创build一个现有的格式与Excel格式的Excel表,并添加数据,并将其保存到一个新的文件

POIFSFileSystem fs = new POIFSFileSystem( new FileInputStream("template.xls")); HSSFWorkbook wb = new HSSFWorkbook(fs, true); Will load an xls, preserving its structure (macros included). You can then modify it, HSSFSheet sheet1 = wb.getSheet("Data"); ... 

然后保存。

 FileOutputStream fileOut = new FileOutputStream("new.xls"); wb.write(fileOut); fileOut.close(); 

这工作绝对好。 但我的问题是,我现在正在处理新版本的Excel。 所以我需要开发一个类似的代码来处理新版本的模板。 有人可以build议我怎么能做到这一点? 我尝试将HSSWorkbook更改为XSSFWorkbook。 但是XSSFWorkbook没有一个让我传递一个布尔值的构造函数。 也。 当我尝试它,它复制数据,但与数据的行不保留该模板具有的列的格式。

这应该可以正常工作(尽pipe对于所有bug修复最好使用最新版本的POI):

 Workbook wb = new XSSFWorkbook( OPCPackage.open("template.xlsx") ); Sheet sheet = wb.getSheetAt(0); // Make changes to the sheet sheet.getRow(2).getCell(0).setCellValue("Changed value"); // For example // All done FileOutputStream fileOut = new FileOutputStream("new.xls"); wb.write(fileOut); fileOut.close(); 

如果你对接口进行编码,那么你可以在你的构造函数中在HSSF和XSSF之间进行交换,并让你的代码适用于这两种格式

我用XSSF,它工作正常。

  XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream("template.xlsx")); FileOutputStream fileOut = new FileOutputStream("new.xlsx"); //Sheet mySheet = wb.getSheetAt(0); XSSFSheet sheet1 = wb.getSheet("Summary"); XSSFRow row = sheet1.getRow(15); XSSFCell cell = row.getCell(3); cell.setCellValue("Bharthan"); wb.write(fileOut); log.info("Written xls file"); fileOut.close(); 

只需要在maven的pom.xml中添加这个依赖

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