Excel生成,不可读的内容

时间:2015-08-12 09:16:10

标签: java excel apache-poi xssf

我正在使用Apache POI 3.12SXSSF工作簿)来生成.xlsx个文件。 问题在于我正在进行生成,当我打开文件时,我收到了错误消息:

  

Excel在file.xlsx中找到了不可读的内容。你想恢复吗?   这个工作簿的内容?如果您相信这个来源   工作簿,单击是。

点击Yes后,文件会打开,我收到此通知

  

Excel完成了文件级验证和修复。这部分内容   工作簿可能已被修复或丢弃。删除记录:   来自/xl/comments1.xml的评论部分(评论)修复记录:   来自/xl/comments1.xml部分的评论(评论)

之后,我解压缩excel文件并检查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);
}

你知道这个问题的原因是什么吗?虽然没有丢失任何信息,但显然存在问题,我想解决它。从数据库(varchar数据类型)检索注释。最大的评论是138个字符长。

更新

我忘了提及的东西。我也使用hssf实现运行相同的提取,并且不存在任何错误。可以安全地假设数据不是问题。

1 个答案:

答案 0 :(得分:0)

好的,我发现了问题。这是作者。

问题在于这一行cellComment.setAuthor(commentAuthor);

如果我们设置了一个评论

cellComment.setAuthor("test")

然后在另一个评论中我们设置了

cellComment.setAuthor("test ")

打开文件时会显示错误。记住空白。解决方案是在设置之前修剪作者字符串。