Как анализировать символы UTF-8 в файлах Excel с помощью POI - PullRequest
7 голосов
/ 09 февраля 2012

Я успешно использую POI для анализа файлов XLS и XLSX.Однако я не могу правильно извлечь специальные символы, такие как символы в кодировке UTF-8, например китайский или японский, из электронной таблицы Excel.Я выяснил, как извлечь данные из файла CSV или таблицы с разделителями табуляции в кодировке UTF-8, но мне не повезло с файлом Excel.Может кто-нибудь помочь?

( Редактировать: Фрагмент кода из комментариев )

HSSFSheet sheet = workbook.getSheet(worksheet); 
HSSFEvaluationWorkbook ewb = HSSFEvaluationWorkbook.create(workbook); 
while (rowCtr <= lastRow && !rowBreakOut) 
{ 
    Row row = sheet.getRow(rowCtr);//rows.next(); 
    for (int col=firstCell; col<lastCell && !breakOut; col++) { 
      Cell cell; 
      cell = row.getCell(col,Row.RETURN_BLANK_AS_NULL); 
      if (ctype == Cell.CELL_TYPE_STRING) { 
         sValue = cell.getStringCellValue(); 
         log.warn("String value = "+sValue); 
         String encoded = URLEncoder.encode(sValue, "UTF-8"); 
         log.warn("URL-encoded with UTF-8: " + encoded); 
         ....

Ответы [ 4 ]

11 голосов
/ 26 февраля 2012

У меня была такая же проблема при извлечении персидского текста из файла Excel.Я использовал Eclipse, и просто перейдя в Project -> Properties и изменив «кодировку текстового файла» на UTF-8, я решил проблему.

3 голосов
/ 28 ноября 2013

в POI вы можете использовать так:

Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet("new sheet");

// Create a row and put some cells in it. Rows are 0 based.
Row row = sheet.createRow(1);

// Create a new font and alter it.
Font font = wb.createFont();
font.setCharSet(FontCharset.ARABIC.getValue());
font.setFontHeightInPoints((short)24);
font.setFontName("B Nazanin");
font.setItalic(true);
font.setStrikeout(true);

// Fonts are set into a style so create a new one to use.
CellStyle style = wb.createCellStyle();
style.setFont(font);

// Create a cell and put a value in it.
Cell cell = row.createCell(1);
cell.setCellValue("سلام");
cell.setCellStyle(style);

// Write the output to a file
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();

и может использовать другую кодировку в FontCharset

1 голос
/ 14 февраля 2017

Решение простое, чтобы прочитать значения строки ячейки любой кодировки (не английские символы);просто используйте следующий метод:

sValue = cell.getRichStringCellValue().getString();

вместо:

sValue = cell.getStringCellValue();

Это относится к кодированным символам UTF-8, таким как китайский, арабский или японский.

PS , если кто-либо использует утилиту командной строки nullpunkt / excel-to-json, которая использует библиотеку «Apache POI», измените файл converter / ExcelToJsonConverter.java, заменив вхождения «getStringCellValue ()», чтобы избежать чтениянеанглийские символы как "???".

1 голос
/ 25 июня 2014

Получить байты с использованием UTF следующим образом

cell.getStringCellValue().getBytes(Charset.forName("UTF-8"));
...