【问题标题】:Getting error using POI HSSF使用 POI HSSF 出错
【发布时间】:2012-07-13 16:20:17
【问题描述】:

尝试使用 MS Office 2003 打开 Excel 工作表时出现错误。此 Excel 工作表是使用 HSSFWorkbook 创建的,实现了用户模型范围 org.apache.poi.hssf.usermodel

在 Microsoft Excel 2003 中:“不同的单元格格式太多”。在 Microsoft Excel 2007/2010 中,文件可能会产生以下错误消息:“Excel 在文件中发现不可读的内容”。这是关于单元格格式的,请参考以下页面:

http://support.microsoft.com/kb/213904

那么如何在代码中解决这个问题呢?

【问题讨论】:

  • 你能告诉我们生成代码吗?
  • 您是否正在为每个单元格生成一种单元格格式?单元格格式适用于工作簿,应重复使用...

标签: java apache-poi poi-hssf


【解决方案1】:

Excel 对您可以拥有的不同单元格样式的数量有限制,而且数量少得惊人。对于刚接触 POI 的人来说,一个常见的问题是他们跳过了关于单元格样式在工作簿范围内的部分,而是为每个单元格创建一个单元格样式。这很快将它们推到 Excel 的极限...

您的代码以前可能看起来像这样

Sheet s = wb.createSheet();
for (int rn=0; rn<=10; rn++) {
    Row r = s.createRow(rn);
    for (int cn=0; cn<=4; cn++) {
        Cell c = r.createCell(c);
        c.setCellValue( getMyCellValue(rn,cn) );

        CellStyle cs = wb.createCellStyle();
        cs.setBold(true);
        if (cn == 2) { 
            cs.setDataFormat( DataFormat.getFormat(yyyy/mm/dd) );
        }
        c.setCellStyle(cs);
    }
}

您需要从头开始创建单元格样式,例如

CellStyle bold = wb.createCellStyle();
bold.setBold(true);

CellStyle boldDate = wb.createCellStyle();
boldDate.setBold(true);
boldDate.setDataFormat( DataFormat.getFormat(yyyy/mm/dd) );

Sheet s = wb.createSheet();
for (int rn=0; rn<=10; rn++) {
    Row r = s.createRow(rn);
    for (int cn=0; cn<=4; cn++) {
        Cell c = r.createCell(c);
        c.setCellValue( getMyCellValue(rn,cn) );

        CellStyle cs = bold;
        if (cn == 2) { 
            cs = boldDate;
        }
        c.setCellStyle(cs);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多