在Apache POI中使用Excel模板
基本问题:如何加载Excel模板以便与POI一起使用,然后将其保存到XLS文件中?
编辑:
答案是:
FileInputStream inputStream = new FileInputStream(new File(templateFile)); Workbook workbook = new HSSFWorkbook(inputStream);
(只需将模板作为工作簿加载,然后将工作簿作为其他位置的XLS文件写入。)
你有没有尝试加载它作为一个标准.xls使用兴趣点,修改它,然后保存它?
这是我用来将macros插入到POI生成的.xls中的方法。 我使用macros创build文件(公认是.xls),然后将其加载到我的应用程序中,填充数据并保存为新创build的.xls文件。 这一切工作正常。
您可以直接加载一个.xls作为模板,并对其进行修改。
POIFSFileSystem fs = new POIFSFileSystem( new FileInputStream("template.xls")); HSSFWorkbook wb = new HSSFWorkbook(fs, true);
将加载xls,保留其结构(包括macros)。 你可以修改它,
HSSFSheet sheet1 = wb.getSheet("Data"); ...
然后保存。
FileOutputStream fileOut = new FileOutputStream("new.xls"); wb.write(fileOut); fileOut.close();
希望这可以帮助。
您也可以使用内部模板作为资源。
InputStream fis = ChartSample.class.getResourceAsStream("/templates.xls"); HSSFWorkbook wb = new HSSFWorkbook(fis); fis.close(); HSSFSheet sh = wb.getSheetAt(0); //Here you go
并保存:
out = new FileOutputStream("./new.xls"); wb.write(out); out.close();
您可以从XLS模板创build一个XLS文件。
但是,要做到这一点,每次需要使用模板时都需要创build一个模板的副本。 如果没有,你将编辑原来的模板(你不想要的)。
所以,你需要先得到你的模板文件:
URL url = Thread.currentThread().getContextClassLoader().getResource("templates/template.xls"); File file = new File(url.getPath());
复制模板文件:
try (FileOutputStream fileOutputStream = new FileOutputStream("/home/jake/fileCopiedFromTemplate.xls")) { Files.copy(file.toPath(), fileOutputStream); Workbook workbook = new HSSFWorkbook(); workbook.write(fileOutputStream); }
访问新的复制文件:
FileInputStream inp = new FileInputStream("/home/jake/fileCopiedFromTemplate.xls");
创build一个Workbook
,所以你可以写在你的新文件:
Workbook workbook = WorkbookFactory.create(inp);
在您的工作簿中写入之后:
try (FileOutputStream fileOut = new FileOutputStream("/home/jake/fileCopiedFromTemplate.xls")) { workbook.write(fileOut); }
创buildXLS模板文件的提示是用一些variables标记模板,以便本地化您想要填充的位置。 喜欢:
------------------------------------ | | Columna A | Column B | ------------------------------------ | 1 | Some description | ------------------------------------ | 2 | {person.name} | {person.age} | ------------------------------------
对于使用.xlsx
excel文件,请使用以下命令:
FileInputStream inputStream = new FileInputStream(new File("template.xlsx")); @SuppressWarnings("resource") Workbook wb = new XSSFWorkbook(inputStream); Sheet sheet = wb.getSheet("sheet1");
如果你想以2007+格式保存,可以在maven pom.xml中添加poi-ooxml依赖项来使用XSSF。
如果在这个xmls中有一个带有汇总表的template.xlsx文件,并且想要更改特定的单元格,可以这样做:
XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream("template.xlsx")); FileOutputStream fileOut = new FileOutputStream("new.xlsx"); 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();