使用Apache POI从string读取excel文件

我正在尝试使用Apache POI 3.9从string中读取excel文件,但没有成功。 我不太熟悉java。

只是澄清,在我的程序中,我已经有一个string的Excel文件,我嘲笑使用readFile函数的行为。

程序:

import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; public class Test { static String readFile(String path, Charset encoding) throws IOException { byte[] encoded = Files.readAllBytes(Paths.get(path)); return encoding.decode(ByteBuffer.wrap(encoded)).toString(); } public static void main(String[] args) throws IOException, InvalidFormatException { String result = readFile("data.xlsx", StandardCharsets.UTF_8); InputStream is = new ByteArrayInputStream(result.getBytes("UTF-8")); Workbook book = WorkbookFactory.create(is); } } 

我得到的错误是:

 Exception in thread "main" java.util.zip.ZipException: invalid block type at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:164) at java.util.zip.ZipInputStream.read(ZipInputStream.java:193) at java.io.FilterInputStream.read(FilterInputStream.java:107) at org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource$FakeZipEntry.<init>(ZipInputStreamZipEntrySource.java:127) at org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource.<init>(ZipInputStreamZipEntrySource.java:55) at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:83) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:267) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:73) at Test.main(Test.java:28) 

任何帮助,将不胜感激。

干杯

你看起来像这样太复杂了。 只需按照Apache POI快速指南 ,build议使用FileInputStream读取文件。 不需要将字节读入字节数组并使用ByteArrayInputStream

使用以下任一项,从指南中复制:

 // Use a file Workbook wb = WorkbookFactory.create(new File("MyExcel.xls")); // Use an InputStream, needs more memory Workbook wb = WorkbookFactory.create(new FileInputStream("MyExcel.xlsx")); 

所以解决我的问题是

 import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Paths; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; public class Test { public static void main(String[] args) throws IOException, InvalidFormatException { byte[] result = Files.readAllBytes(Paths.get("data.xlsx")); InputStream is = new ByteArrayInputStream(result); Workbook book = WorkbookFactory.create(is); } } 

你在做什么? 您正在读取一个二进制文件到一个byte[]并使用UTF-8将其转换为一个String 。 稍后你再次使用UTF-8将其转换回字节stream。 做什么的? 跳过中间的所有步骤:

 public static void main(String[] args) throws IOException, InvalidFormatException { InputStream is = new FileInputStream("data.xlsx"); Workbook book = WorkbookFactory.create(is); }