我们正在尝试将POI 3.8用于应用程序中的excel组件,该组件必须处理大型excel文件的创建。我很高兴使用SXSSF流媒体方法,它速度快,内存占用少。然而,我无法进行数据验证,必须使用XSSF。
在XSSF中,当我尝试打开xlsx文件(大约5 MB)时,内存会急剧增加,并且大部分会导致OutOfMemory。我的问题是,
>
是否可以使用SXSSF进行数据验证(如从下拉列表中选择)。这将是我的祝福。
有没有一种方法可以使用XSSF进行数据验证,但内存占用更少。
是否有另一种快速且内存高效的xlsx数据验证java解决方案。
提前谢谢你。。
我在解析xlsx文件时也遇到了同样的OOM问题......经过两天的挣扎,我终于找到了下面这段非常完美的代码;
此代码基于sjxlsx。它读取xlsx并存储在HSSF工作表中。
// read the xlsx file
SimpleXLSXWorkbook = new SimpleXLSXWorkbook(new File("C:/test.xlsx"));
HSSFWorkbook hsfWorkbook = new HSSFWorkbook();
org.apache.poi.ss.usermodel.Sheet hsfSheet = hsfWorkbook.createSheet();
Sheet sheetToRead = workbook.getSheet(0, false);
SheetRowReader reader = sheetToRead.newReader();
Cell[] row;
int rowPos = 0;
while ((row = reader.readRow()) != null) {
org.apache.poi.ss.usermodel.Row hfsRow = hsfSheet.createRow(rowPos);
int cellPos = 0;
for (Cell cell : row) {
if(cell != null){
org.apache.poi.ss.usermodel.Cell hfsCell = hfsRow.createCell(cellPos);
hfsCell.setCellType(org.apache.poi.ss.usermodel.Cell.CELL_TYPE_STRING);
hfsCell.setCellValue(cell.getValue());
}
cellPos++;
}
rowPos++;
}
return hsfSheet;
它与ss配合得很好。用户模型(http://poi.apache.org/spreadsheet/quick-guide.html#Validation)
只是不像手册中那样使用XSSF工作簿:
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Data Validation");
DataValidationHelper dvHelper = sheet.getDataValidationHelper();
将您的SXSSF工作簿放在那里,以便从SXSSF工作表中提取DataValidationHelper
Workbook workbook = new SXSSFWorkbook();
Sheet sheet = workbook.createSheet("Data Validation");
DataValidationHelper dvHelper = sheet.getDataValidationHelper();
//stuff with validation
从调试器POI 3.10.1中可以看到OutOfMemory的原因:
XSSFWorkbook has ArrayList<XSSFSheet>;
XSSFSheet has TreeMap<Integer,XSSFRow>;
XSSFRow has field _row._textsource._srcAfter found as char[32768]
计数:32768*(行数)=完全浪费内存......在我的情况下超过1 gb。
根据要求,我的应用程序首先需要读取一个大约75k-100k行和90列的Excel文件。但在XSSFWorkbook加载pkg/file时,我在第2行遇到了以下异常 线程“main”Java.lang.OutOfMemoryError中出现异常:com.sun.org.apache.xerces.internal.dom.DeferredDocumentMPL.CreateChunk中的Java堆空
我正在使用ApachePOI,我创建了一个XSSF工作簿,并尝试打开一个xlsx文件。它在当地的一个地方很有效。但是,当我用Excel打开真正服务器(AWS EC2、Tomcat8、JDK 1.8)上的Excel文件时,它显示文件已损坏(.xls工作)。这是我的代码: 本地Spring4, jdk1.8, tomcat 8.0, maven 真正的AWS EC2亚马逊linux2,jdk1。8、t
这里是ApachePOI4.x。我看到有两种类型的实现: HSSF工作手册 我需要编写一个Java 8应用程序,它可以读取带有“”(xls)或“”(xlsx)扩展名的Excel表格。也就是说,Excel文件是以“旧”(2003年以前)格式保存的,还是更新的格式保存的。 假设我对XLS文件使用HSSF,对XLSX文件使用XSSF,安全吗?或者映射逻辑在这里稍微复杂一点?这个答案似乎表明我是正确的,但
问题内容: 打开并立即关闭使用Apache POI XSSF创建的xlsx文件后,系统提示我保存未保存的更改。据我所知,这是因为我在xlsx文件中使用公式。 根据javadoc,这应该通过设置来绕过。 但是,这不能解决问题。 我还尝试过手动重新计算公式,然后再保存文件而没有成功。 SSCCE: 第一次打开文件后,我该怎么做才能创建文件而又没有提示保存文件? 更新:如此处 所述(https://po
Cross-Site Scripting Framework (XSSF)是一款安全工具,使用它可以非常容易的利用跨站脚本(XSS)漏洞。XSSF项目的主要目的是展示XSS的实际危害。
我一直在开发一个android应用程序,在这个应用程序中,我必须打开.xls和.xlsx文件以便进一步实现。在.xls的情况下,一切工作正常,但当我尝试打开.xls x文件时,它给了我异常。下面是我的代码,请帮助我解决这些异常 我正在使用的JAR: null