关于使用 Java 处理大型 XLS 文件的 API / 框架的建议 [关闭]
Posted
技术标签:
【中文标题】关于使用 Java 处理大型 XLS 文件的 API / 框架的建议 [关闭]【英文标题】:Suggestion on API / Framework to Process large XLS files using Java [closed] 【发布时间】:2013-01-15 08:47:58 【问题描述】:我需要技术选择来使用 Java 处理更大的 XLS 文件
需要处理xmls文件而不出现内存不足异常
需要在内存(工作内存)使用上进行优化
请推荐
【问题讨论】:
【参考方案1】:Apache POI 框架是最佳选择 - link
event-based-api 有助于实现最佳内存优化
如果如here所示正确实施,它可以处理更大的excel表
读取大文件示例:
public void parseExcel(File file) throws IOException
OPCPackage container;
try
container = OPCPackage.open(file.getAbsolutePath());
ReadOnlySharedStringsTable strings = new ReadOnlySharedStringsTable(container);
XSSFReader xssfReader = new XSSFReader(container);
StylesTable styles = xssfReader.getStylesTable();
XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) xssfReader.getSheetsData();
while (iter.hasNext())
InputStream stream = iter.next();
processSheet(styles, strings, stream);
stream.close();
catch (InvalidFormatException e)
e.printStackTrace();
catch (SAXException e)
e.printStackTrace();
catch (OpenXML4JException e)
e.printStackTrace();
protected void processSheet(StylesTable styles, ReadOnlySharedStringsTable strings, InputStream sheetInputStream) throws IOException, SAXException
InputSource sheetSource = new InputSource(sheetInputStream);
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
try
SAXParser saxParser = saxFactory.newSAXParser();
XMLReader sheetParser = saxParser.getXMLReader();
ContentHandler handler = new XSSFSheetXMLHandler(styles, strings, new SheetContentsHandler()
@Override
public void startRow(int rowNum)
@Override
public void endRow()
@Override
public void cell(String cellReference, String formattedValue)
@Override
public void headerFooter(String text, boolean isHeader, String tagName)
,
false//means result instead of formula
);
sheetParser.setContentHandler(handler);
sheetParser.parse(sheetSource);
catch (ParserConfigurationException e)
throw new RuntimeException("SAX parser appears to be broken - " + e.getMessage());
【讨论】:
以上是关于关于使用 Java 处理大型 XLS 文件的 API / 框架的建议 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Java通过jxl解析Excel文件入库,及日期格式处理方式 (附源代码)
C# 将 csv 转换为 xls(使用现有的 csv 文件)