Apache POI存在问题(3.8最终版本)。
我的任务:根据基本xls / xlsx文档中的数据创建一些xls / xlsx文件。
首先,我尝试通过CellStyle.cloneFrom
将一些数据(Cell,CellStyle等)从基础文档复制到目标文档。它看起来不错,但是当我打开xlsx文件(xl/styles.xml
)时,我发现它与我的源文档有不同的样式(和字体)数。
我可以通过POI API创建源xls / xlsx文档的完整副本吗?
创建基础文档模板并创建新文档的代码:
public WorkbookTemplate constructTemplate(Workbook wb)
{
//copy styles from template
styles = new HashSet<CellStyle>(wb.getNumCellStyles());
for (short i = 0; i < wb.getNumCellStyles(); i++)
{
styles.add(wb.getCellStyleAt(i));
}
System.out.println(wb.getNumCellStyles());
for (int i = 0; i < wb.getNumberOfSheets(); i++)
{
Sheet sheet = wb.getSheetAt(i);
SheetTemplate sheetTemplate = new SheetTemplate(this);
sheets.add(sheetTemplate.constructTemplate(sheet));
}
return this;
}
public Workbook applyTemplate(Workbook wb, JXPathContext context)
{
preProcessOfWorkBook(wb);
System.out.println(wb.getNumCellStyles());
for (SheetTemplate sheetTemplate : sheets)
{
Sheet newSheet = wb.createSheet(sheetTemplate.getSheetName());
sheetTemplate.applyTemplate(newSheet, context);
}
return wb;
}
public void preProcessOfWorkBook(Workbook wb)
{
//Transfer of CellStyles
styleConvert = new HashMap<CellStyle, CellStyle>(styles.size());
for (CellStyle style : styles)
{
CellStyle bufStyle = wb.createCellStyle();
bufStyle.cloneStyleFrom(style);
styleConvert.put(style, bufStyle);
}
}
它是WorkbookTemplate类的一部分,constructTemplate - 创建它,applyTemplate - 将数据从模板传输到Workbook实例