2015-11-05 2 views
0

У меня проблема с чтением японских символов в файле Excel. Конструктор читателя заключается в следующем:Японские символы отображаются неправильно в ReadOnlySharedStringsTable

public XExcelFileReader(final String excelPath) throws Exception { 
    this.opcPkg = OPCPackage.open(excelPath, PackageAccess.READ); 
    this.stringsTable = new ReadOnlySharedStringsTable(this.opcPkg); 

    XSSFReader xssfReader = new XSSFReader(this.opcPkg); 
    XMLInputFactory factory = XMLInputFactory.newInstance(); 
    InputStream inputStream = xssfReader.getSheetsData().next(); 
    this.xmlReader = factory.createXMLStreamReader(inputStream); 

    while (this.xmlReader.hasNext()) { 
     this.xmlReader.next(); 
     if (this.xmlReader.isStartElement()) { 
     if (this.xmlReader.getLocalName().equals("sheetData")) 
      break; 
     } 
    } 
    } 

На данный момент, stringsTable имеет японские символы, такие как 予算ヨサン, но в файле Excel, он читает только 予算. Некоторые из них отображаются, как они отображаются в файле Excel, но некоторые из них отсутствуют. Я не уверен, где это происходит, и кодировка UTF-8.

Я читаю большой файл Excel, и я попытался создать книгу, но он выдает ошибку памяти, поэтому использование этого параметра не является вариантом.

Любая идея о том, где это может пойти не так?

+0

Извините. Это Java. Спасибо, что заметили. – paaaaat

+0

Разум дает мне урок? :) – paaaaat

ответ

0

Найден ответ. Изменен конструктор:

public XExcelFileReader(final String excelPath) throws Exception { 
    this.opcPkg = OPCPackage.open(excelPath, PackageAccess.READ); 
    XSSFReader xssfReader = new XSSFReader(this.opcPkg); 
    this.stringsTable = xssfReader.getSharedStringsTable(); 

    XMLInputFactory factory = XMLInputFactory.newInstance(); 
    InputStream inputStream = xssfReader.getSheetsData().next(); 
    this.xmlReader = factory.createXMLStreamReader(inputStream); 

    while (this.xmlReader.hasNext()) { 
     this.xmlReader.next(); 
     if (this.xmlReader.isStartElement()) { 
     if (this.xmlReader.getLocalName().equals("sheetData")) { 
      break; 
     } 
     } 
    } 
    } 

и изменены строкиTable to SharedStringsTable. Я не совсем уверен, почему XSSFReader должен был идти первым. Любой, кто может объяснить, более чем приветствуется.

Смежные вопросы