Tag: apache poi

Java的Apache POI

我正在从excel文档中读取数据,每两周更新大约50,000行数据,在开始新表之前可能会达到约12万。 我正在使用Apache POI来获取数据。 我在下面得到这个例外,但我相信最重要的一个例外是由:java.lang.OutOfMemoryError:Java堆空间。 我已经testing了我的代码,使用更less的数据在不同的Excel表单上,并且能够读取数据。 如果您有任何关于如何阅读大型Excel文档的方法或build议,请分享。 org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:62) at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:456) at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:461) at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:461) at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:461) at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:162) at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:271) at excelreader.readExcelFile(excelreader.java:28) at excelreader.main(excelreader.java:18) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:60) … 13 more Caused […]

使用Apache POI将文件embedded到Excel中的XSSF表单中

我发现kiwiwings 回答了如何使用Apache POI将文件embedded到Excel中的问题,但不幸的是,他的回答只包含HSSF电子表格(XLS格式),而我们正在使用新的XSSF格式(XLSX),而解决scheme提出HSSF电子表格将无法正常工作。 我尝试移植它,但棺材中的最后一颗钉子来自XSSF世界中没有HSSFObjectData等价物的事实。 这就是我迄今为止所做的 – 我已经find了一种将文件附加到Excel文件的方法。 这段代码是这样做的: private PackagePart packageNotebook( final OPCPackage pkg, final String notebookTable, final String taskId, final String notebookName, final byte[] contents ) throws InvalidFormatException, IOException { final PackagePartName partName = PackagingURIHelper.createPartName( "/notebook/" + notebookTable + "/" + taskId + "/" + notebookName ); pkg.addRelationship( partName, TargetMode.INTERNAL, PackageRelationshipTypes.CUSTOM_XML ); final PackagePart […]

在Apache POI中通过文本查找Excel单元格

我想通过文本在Excel工作表中find一个单元格。 文本是像%t : sheet.findCell("%t"); // pseudo-code, not working 我的目标是使用户能够提供一种模板,在其中写入数据。 用户可以在Excel文件中configuration颜色和字体,以及数据的位置。 这个%t单元格是数据表的左上angular。 附加问题:是否有更好的方法来完成这项工作? 编辑我遍历行和单元格来find它。 恐怕它不是真的有效,但它迄今为止工作: public static Cell findCell(XSSFSheet sheet, String text) { for(Row row : sheet) { for(Cell cell : row) { if(text.equals(cell.getStringCellValue())) return cell; } } return null; }

如何使用POI删除工作表之间的空白行?

我想要使​​用POI从Excel工作表中删除空行。 我们有像shiftRow()或removeRow()但是不能在这种情况下使用。 请帮我完成。

如何获取数据透视表最后一次使用POI + Java填充行号。 -version 3.12.x

我有一个包含两张工作表的Excel工作表。 一个是数据表,第二个是数据透视表。 在包含数据透视表的Excel工作表中获取最后一个行号时遇到问题。 我正在使用-version 3.12.x poi。 我试过areaRef.getLastCell().getCol(); , newSheet.getLastRowNum(); 和pivotTable.getDataSheet().getPhysicalNumberOfRows()等现有的方法也。 但是我没有得到正确的价值。 它返回数据表logging的最后一个数字而不是数据透视表。 有谁知道如何获得数据透视表中的最后一个填充行号?

POI颜色仅限于IndexedColors吗?

我想在Java中使用Apache POI设置Excel单元格颜色。 我在Excel中玩过,并select了我想要的颜色 – 但我无法弄清楚如何在POI中使用这些颜色。 我正在使用font.setColor方法,它需要一个简短的索引颜色…这似乎表明我被限制在IndexedColors的常量。 有没有办法将单元格设置为hex颜色值? 或者我只能使用预定义的常量?

通过使用带有Java的Apache POI创buildexcel(.xlsx)文件后,文件已损坏

我使用Apache POI API成功地以.xlsx格式创build了使用Java的Workbook / Excel。 我的代码如下所示,在D盘中创build一个名为“RiponAlWasim.xlsx”的文件: Workbook wb = new XSSFWorkbook(); FileOutputStream fileOut = new FileOutputStream("D:\\RiponAlWasim.xlsx"); wb.write(fileOut); fileOut.close(); wb.close(); 当我试图打开“RiponAlWasim.xlsx”时,显示文件已损坏。 什么问题?

格式化lucee电子表格时出错:超过了单元格样式的最大数量

我正在使用lucee-spreadsheet ,这是一个很棒的工具。 我正在制作一个非常大的电子表格(工作簿中有多个工作表,每张工作表有数千行)。 一切都按预期工作。 我已经用表单填充了数据,并在客户端需要的组之间创build空行。 我现在回去尝试应用一些格式,我遇到了错误: 单元格样式的最大数量已超出。 您可以在.xls工作簿中定义最多4000个样式 问题是,我只尝试应用一种风格: spreadsheet.formatColumns(workbook=workbook, format={dataformat="$##,####0.00"},range='5-20'); 还有一些我需要应用的其他风格。 我猜测,因为有超过500行,这种风格被应用到16列,该风格实际上格式化每个单元格,而不是列。 有没有不同的方式,我可以或应该应用这种风格?

如何通过XSSF事件API评估一个Excel公式

我正在使用Apache POI的事件API来读取XLSX文件,即通过SAXparsing器读取XLSX表格的内容。 我想知道如何通过使用XSSF事件API来获取公式的计算值。 我知道这样做是通过使用FormulaEvaluator类。 但是由于formulaEvaluator需要一个Workbook类的实例,所以我不想使用这种方法。 (我正在阅读包含一百万行和100列的Excel文件,所以如果我创build该Excel的工作簿对象,我的应用程序服务器将耗尽内存,因此我正在使用事件API) 如何在事件parsing中执行评估,而无需Workbook实例?

从单元格值Apache POI获取单元格索引

Environment Status Version PatchNumber Windows Live 1.0 2 Unix Live 2.0 4 Mac Live 1.3 8 如果我在Excel中显示上述数据,如何使用文本访问PatchNumber的cellNumber XSSFRow row = (XSSFRow) rows.next(); 我想访问row.getCellNumber("PatchNumber"); //注意这个方法在Apache POI中不存在。