当前我正在尝试读取一个Excel文件,该文件是通过Apache Camel(2.25.1)轮询的。这意味着该方法通过一个字符串获取文件内容:
@Handler
public void processFile(@Body String body) {
为了阅读Excel文件,我使用Apache POI和POI-ooxml(都是4.1.2)。
但是,直接使用String
WorkbookFactory.create(new ByteArrayInputStream(body.getBytes(Charset.forName("UTF-8"))))
抛出一个“java.io. IO异常:ZIP项大小太大或无效”。
将String与其他编码一起使用:
WorkbookFactory.create(new ByteArrayInputStream(body.getBytes()))
异常错误:未找到有效条目或内容,这不是有效得OOXML(Office Open XML)文件”.“
再说,我试过:
File file = exchange.getIn().getBody(File.class);
Workbook workbook = new XSSFWorkbook(new FileInputStream(file));
可能是因为文件是从FTP服务器读取的,所以会抛出java.io.FileNotFoundException:文件路径无效
但是,下一个代码确实有效:
URL url = new URL(fileFtpPath);
URLConnection urlc = url.openConnection();
InputStream ftpIs = urlc.getInputStream();
Workbook workbook = new XSSFWorkbook(ftpIs);
但是我不想自己连接到FTP服务器,因为Camel已经读取了文件,并且所需的Excel内容是可用的(在String body中)。有什么方法可以用Apache POI从String中读取Excel文件的内容吗?
2条答案
按热度按时间9cbw7uwe1#
我的路径是XML格式的,所以我使用groovy来处理excel文件,也许您会发现它很有帮助
还有另一种方法通常用于处理大型excel文件,在这种情况下,我们需要处理流。
您可以在这个SO question中找到原始POI示例的副本,由于某种原因,它最近从poi svn中被删除了。
bd1hkmkf2#
您可以直接将主体转换为InputStream,并将其传递给XSSFWorkbook构造函数