我需要在Java应用程序中读取Excel 2007 XLSX文件。有谁知道一个很好的API来完成这个任务?
答案 0 :(得分:50)
Apache POI 3.5增加了对所有OOXML(docx,xlsx等)的支持
答案 1 :(得分:5)
我必须在.NET中执行此操作,但我找不到任何API。我的解决方案是解压缩.xlsx,然后直接进入操作XML。一旦你创建了辅助类等,就没那么糟糕了。
有一些“陷阱”就像节点都必须按照excel期望的方式排序,我在官方文档中找不到。 Excel有自己的日期时间戳,因此您需要制作转换公式。
答案 2 :(得分:5)
AFAIK还没有xlsx库可用。但是有一些旧的xls:
其他2个链接:Handle Excel files,Java libraries to read and write Excel XLS document files。
答案 3 :(得分:5)
可能会有点晚,但测试版POI现在支持xlsx。
答案 4 :(得分:3)
这个可能对你有用,它可以读/写Excel 2007 xlsx文件。 SmartXLS
答案 5 :(得分:2)
我对任何选项都不满意,所以我最终以Excel 97格式请求该文件。 POI非常适用于此。谢谢大家的帮助。
答案 6 :(得分:1)
没关系:
HSSF是POI Project的Excel '97(-2007)文件格式的纯Java实现。它不支持新的Excel 2007 .xlsx OOXML文件格式,它不是基于OLE2的。
您可以考虑改为使用JDBC-ODBC bridge。
答案 7 :(得分:1)
我不知道它是否是Excel 2007的最新版本,但对于早期版本,我使用JExcelAPI
答案 8 :(得分:1)
docx4j现在也涵盖了xlsx。
“你为什么要用docx4j来做这件事”,我听你问,“而不是POI,它专注于xlsx和二进制xls?”
可能是因为你喜欢JAXB(而不是XML Beans),或者你已经将docx4j用于docx或pptx,并且需要能够用xlsx做一些事情。
另一个可能的原因是,从OpenXML模式生成的jar XML Beans对于您的目的来说太大了。 (为了解决这个问题,POI提供了一个'lite'子集:'big'ooxml-schemas-1.0.jar是14.5 MB!但是如果你需要支持任意电子表格,你可能需要完整的jar)。相比之下,整个docx4j / pptx4j / xlsx4j的重量与POI的精简子集大致相同。
如果您只处理电子表格(即不是docx或pptx),并且您不关心前一段,那么您可能最好使用POI。
答案 9 :(得分:1)
Aspose.Cells for Java支持XLSX格式。您可以在Aspose.Cells for Java Documentation中找到更多详细信息和进一步的帮助。请看看这是否有帮助。
披露:我在Aspose担任开发人员传播者。
答案 10 :(得分:1)
您可以使用Apache Tika:
String parse(File xlsxFile) {
return new Tika().parseToString(xlsxFile);
}
Tika使用Apache POI解析XLSX文件。
以下是Tiki的一些usage examples。
或者,如果您想单独处理电子表格的每个单元格,以下是使用POI执行此操作的一种方法:
void parse(File xlsx) {
try (XSSFWorkbook workbook = new XSSFWorkbook(xlsx)) {
// Handle each cell in each sheet
workbook.forEach(sheet -> sheet.forEach(row -> row.forEach(this::handle)));
}
catch (InvalidFormatException | IOException e) {
System.out.println("Can't parse file " + xlsx);
}
}
void handle(Cell cell) {
final String cellContent;
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
cellContent = cell.getStringCellValue();
break;
case Cell.CELL_TYPE_NUMERIC:
cellContent = String.valueOf(cell.getNumericCellValue());
break;
case Cell.CELL_TYPE_BOOLEAN:
cellContent = String.valueOf(cell.getBooleanCellValue());
break;
default:
cellContent = "Don't know how to handle cell " + cell;
}
System.out.println(cellContent);
}
答案 11 :(得分:0)
如果要使用xlsx,则必须使用org.apache.poi.ss包。该软件包具有XSSF类,可用于解析xlxs文件。此示例代码可在Excel 2007或更高版本(.xlsx)上使用
OPCPackage pkg = OPCPackage.open(new ByteArrayInputStream(data));
Workbook wb = new XSSFWorkbook(pkg);
Sheet sheet = wb.getSheetAt(0);
Iterator<Row> rows = sheet.rowIterator();
while (rows.hasNext()) {
int j = 5;
Person person= new Person ();
Row row = rows.next();
if (row.getRowNum() > 0) {
person.setPersonId((int)(row.getCell(0).getNumericCellValue()));
person.setFirstName(row.getCell(1).getStringCellValue());
person.setLastName(row.getCell(2).getStringCellValue());
person.setGroupId((int)(row.getCell(3).getNumericCellValue()));
person.setUserName(row.getCell(4).getStringCellValue());
person.setCreditId((int)(row.getCell(5).getNumericCellValue()));
}
}
Excel 1998-2003 file (.xls) - you may use HSSF library.
just use : Workbook wb = new HSSFWorkbook(pkg);