Проблема кодирования в JExcel - PullRequest
14 голосов
/ 18 апреля 2011

Я загружаю файл Excel в приложение GAE / Java с помощью JExcel следующим образом:

HTML-форма для загрузки файла выглядит следующим образом:

<form id="" action="/save" method="post" enctype="multipart/form-data" accept-charset="ISO-8859-1">
    <input name="file" type="file" value="load"/>
    <input type="submit"value="load excel"/>
</form>

а на сервере у меня:

ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iterator = upload.getItemIterator(request);
while (iterator.hasNext()) {
    FileItemStream item = iterator.next();
    InputStream stream = item.openStream();
    if (!item.isFormField()) {
        //if it's not a form field it's a file

        Workbook workbook = Workbook.getWorkbook(stream);
        ...
        String name = sheet.getCell(COL_NUMBER, row).getContents();
    }
}

Проблема в том, что если я напишу в ячейке что-то вроде ' city ó ', когда он читает на сервере, имя переменной будет * city? '. Кодировка не в порядке.

Я пытался изменить accept-charset = "ISO-8859-1" (установив его в utf-8 или удалив), но безуспешно.

Может кто-нибудь сказать мне, как я мог решить эту проблему.

Спасибо

Ответы [ 3 ]

33 голосов
/ 18 апреля 2011

ОК, я получил это, сделав это:

WorkbookSettings ws = new WorkbookSettings();
ws.setEncoding("Cp1252");
Workbook workbook = Workbook.getWorkbook(stream, ws);
3 голосов
/ 24 января 2012

WorkbookSettings будет искать системное свойство jxl.encoding

Если у вас нет легкого доступа к WorkbookSettings (т.е. из Drools- ExcelParser), вы можете найти это предпочтительным.

0 голосов
/ 18 апреля 2011

Прежде всего, убедитесь, что вы используете последнюю версию POI (что-то вроде 3.7 или 3.8 beta 2).У очень старых версий POI действительно были проблемы с кодированием, но если вы работаете с новой версией, это не должно быть вашей проблемой.

Далее, на вашем локальном компьютере запустите что-то вроде org.apache.poi.hssf.extractor.ExcelExtractor для файла.Это позволит вам подтвердить, что POI правильно обрабатывает кодировку.Запустите его с

java -classpath poi-3.8-beta2.jar org.apache.poi.hssf.extractor.ExcelExtractor --show-sheet-names Y -i MyExcel.xls

Если все работает нормально, значит, ваша проблема в Google App Engine.

...