2015-08-12 11 views
0

Я использую Apache POI 3.12 (SXSSF) для создания файлов .xlsx. Проблема заключается в том, что я делаю поколение и когда я открываю файл, я получаю сообщение об ошибке:Генерация Excel, нечитаемый контент

Excel найти не удается прочитать содержимое в file.xlsx. Вы хотите восстановить содержание этой книги? Если вы доверяете источнику этой книги , нажмите «Да».

После нажатия Yes, файл открывается, и я получаю это уведомление

Excel завершена проверка и ремонт на уровне файлов. Некоторые части этой книги , возможно, были отремонтированы или отброшены. Удалены отчеты: Комментарии от /xl/comments1.xml части (Комментарии) Исправленные отчеты: Комментарии от /xl/comments1.xml части (Комментарии)

После этого я разархивировать файл первенствовать и проверить comments1.xml , Все мои комментарии присутствуют. Все 216 из них.

раздел кода, который генерирует комментарии имеет следующий

String comment = _propertiesHolder.getComment(); 
String commentAuthor = _propertiesHolder.getCommentAuthor(); 
if(comment != null) 
{ 
    int colIndex = cell.getColumnIndex(); 
    int rowIndex = cell.getRowIndex(); 
    CreationHelper helper = _workbook.getCreationHelper(); 
    ClientAnchor anchor = helper.createClientAnchor(); 
    anchor.setCol1(colIndex); 
    anchor.setCol2(colIndex + 1); 
    anchor.setRow1(rowIndex); 
    anchor.setRow2(rowIndex + 3); 

    // Create the comment and set the text+author 
    Comment cellComment = _drawingPatriarch.createCellComment(anchor); 
    if(commentAuthor != null) 
    { 
     cellComment.setAuthor(commentAuthor); 
     RichTextString rs = helper.createRichTextString(commentAuthor + ": " + comment); 
     cellComment.setString(rs); 
    } 
    else 
    { 
     cellComment.setString(helper.createRichTextString(comment)); 
    } 

    cellComment.setRow(rowIndex); 
    cellComment.setColumn(colIndex); 

    // Assign the comment to the cell 
    cell.setCellComment(cellComment); 
} 

У вас есть какие-либо идеи, что может быть причиной этой проблемы? Хотя информация не была потеряна, очевидно, что что-то не так, и я хотел бы ее исправить. Комментарии извлекаются из базы данных(). Самый большой комментарий - 138 символов.

Update

Что-то, что я забыл упомянуть. Я также запускаю то же извлечение, используя hssf, и ошибок не было. Было бы безопасным предположением, что данные не являются проблемой.

+0

Вы делаете это за один комментарий или добавляете несколько комментариев? – Gagravarr

+0

Несколько комментариев, всего 216. Одна электронная таблица. – alkis

+0

Почему вы каждый раз создаете нового Патриарха рисунка? В соответствии с [предупреждением в javadocs] (https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Sheet.html#createDrawingPatriarch%28%29), это может удалить любые существующие каждый раз, когда вы это называете! – Gagravarr

ответ

0

Хорошо, я нашел проблему. Это было с автором.

Проблема в этой строке cellComment.setAuthor(commentAuthor);.

Если для одного комментария мы устанавливаем

cellComment.setAuthor("test")

, а затем в другом комментарии мы устанавливаем

cellComment.setAuthor("test ")

Там будет ошибка появляется при открытии файла. Обратите внимание на пробелы. Решение состоит в том, чтобы обрезать строку автора перед ее настройкой.

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

  • Нет связанных вопросов^_^