Я использую Java и Apache POI для чтения файлов .xlsx. (60k + строки), но получаю ошибку.
Я использую последнюю версию плагина maven из poi и xmlbeans.
Согласно связанным вопросам, которые я нашел в StackOverflow, последние poi должны успешно обрабатывать файлы с помощью специального символа.
Я могу заменить специальный символ в программе самостоятельно, если это xml-файл. Но это файл Excel.
Сложность в том, что я не знаю, как использовать poi, чтобы успешно прочитать файл "excel".
Или есть способ обработать файл?
Я использую openjdk, версия: "1.8.0_171-1-redhat".
сообщение об ошибке, подобное этому
Caused by: java.io.IOException: unable to parse shared strings table
at org.apache.poi.xssf.model.SharedStringsTable.readFrom(SharedStringsTable.java:134)
at org.apache.poi.xssf.model.SharedStringsTable.<init>(SharedStringsTable.java:111)
... 11 more
Caused by: org.apache.xmlbeans.XmlException: error: Character reference "�" is an invalid XML character.
at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3440)
at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1272)
at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1259)
at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345)
at org.openxmlformats.schemas.spreadsheetml.x2006.main.SstDocument$Factory.parse(Unknown Source)
at org.apache.poi.xssf.model.SharedStringsTable.readFrom(SharedStringsTable.java:123)
код
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import org.apache.commons.codec.binary.Base64;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class test2 {
public static void main(String[] args) throws Exception {
File file = new File("D:\\Users\\3389\\Desktop\\Review\\drive-download-20181112T012605Z-001\\ticket.xlsx");
Workbook workbook = null;
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(file); //error occured
workbook = new SXSSFWorkbook(xssfWorkbook);
Sheet sheet = xssfWorkbook.getSheetAt(0);
System.out.println("the first row:"+sheet.getFirstRowNum());
}
}
pom.xml
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.0</version>
</dependency>
UTF16SurrogatePairs в shareString.xml (несколько примеров)
������
��
��������������
etc....