2016-02-10 74 views
1

我使用Apache POI为报告生成xlsx表单。 POI生成的报告之一,我使用Microsoft Excel保存为另一个报告。比较原始文件和保存的文件时,有12Mb的差异。原始文件是15Mb,而保存的文件只有2.5Mb。使用的工作簿是XSSFWorkbook。Apache POI生成的xlsx文件大小大于通过Microsoft Excel手动创建的大小

是否有可能减少的Apache POI创建的文件大小

这里是代码片段我用:从代码

XSSFWorkbook workbookTitle = new XSSFWorkbook(fileInputStream); 
workbook = new SXSSFWorkbook(workbookTitle, maxRows); 

font = workbook.createFont(); 
font.setFontHeightInPoints((short) 9); 
font.setFontName(FONT_NAME); 

cellTwoDecimal = workbook.createCellStyle(); 

DataFormat format = workbook.createDataFormat(); 

cellTwoDecimal.setDataFormat(format.getFormat("0.00")); 
cellTwoDecimal.setFont(font); 

cellCommon = workbook.createCellStyle(); 
cellCommon.setFont(font); 

cellText = workbook.createCellStyle(); 
cellText.setDataFormat((short) BuiltinFormats.getBuiltinFormat("text")); 
cellText.setFont(font); 

cellWrpText = workbook.createCellStyle(); 
cellWrpText.setWrapText(true); 
cellWrpText.setFont(font); 


Row row; 
Cell cell; 

for (int i = 0; i < size; i++) { 
    row = excelSheet.createRow(rowIndex++); 
    cell = row.createCell(i); 
    cell.setCellValue(rowHeader); 
    cell.setCellStyle(cellCommon); 

} 

我已删除了一些内部逻辑。请分享你的想法。

[编辑1] 我插入了很多没有价值的空白单元格,即。报告的某些部分没有任何价值。所以我在那里放了一个空白单元格。我也为空白单元格设置样式。这是原因吗?

在此先感谢。

+0

根据给出的代码,我相信你遵循[http://poi.apache.org/faq.html#faq-N100EF]中给出的标准。确保你没有在你删除的代码中违反它。 – Renjith

+0

excel文件实际上是档案 - 你可以将它们解压缩!!你可以尝试比较这两个版本 - 在ms excel打开之前和保存后ms excel –

+0

ofcourse我试过。提取后的纸张很大。我的意思是原始为179mb,保存的文件为29mb。原始文件中有一些额外的数据。我需要知道一种通过代码来删除它们的方法。 – Sandeep

回答

2

根据你的“编辑1”...如果我正确理解你,你创建没有价值的单元格。 你不必这样做。如果你不想写东西,那么不要创建空单元格。 对我而言,如果你想写点东西,你只需要创建行和单元格。

从这个角度来看,很明显,你的xlsx非常大(很多很多细胞对象)。我认为MS Excel删除手动保存的空单元格。

新增:需要说明的是,您的单元格样式也存在问题。请尽量使用尽可能少的CellStyle实例。如果具有相同样式的单元格,则不要使用相同的属性创建CellStyle的新实例。请申请相同的CellStyle实例。也不要将样式分配给简单的文本单元格。在这种情况下,excel使用默认样式(background ='white',textcolor ='black',font ='任意默认',size ='任意默认',format ='default')。

+0

我也试过这个。它将文件大小减小到12Mb。仍然有大约10Mb的差异。 – Sandeep

+0

请检查我添加的信息。 –

0

我有一个类似的问题,后来发现我以append模式打开FileOutputStream(append = true)。每次我更新表单上的单个单元格时,文件大小呈指数级增长(从7KB到54KB)。 当删除附加,它工作得很好。