如何在JAVA中使用apache poi删除Excel中的警告?

时间:2014-05-06 07:14:43

标签: java excel apache-poi

我正在使用apache poi api在我的应用程序中生成Excel工作表。在excel中设置的数据将以类型字符串动态显示。 对于column1,值为字母数字。当我生成Excel时,它会给我绿色指示,警告&#34;号码存储为文本&#34; &#34;文本日期为2位数年份&#34; < / strong> on cell。

我想删除该警告。 我发现从excel我们可以标记一个单元格,并忽略错误&#39;,忽略警告。

如何以编程方式执行此操作,还是有其他替代方法来完成此任务?

我还附上了屏幕截图,显示带有绿色标记的警告。

enter image description here

代码:

if (cellValue != null && (shouldBeRightAlign))
{
 cellType = Cell.CELL_TYPE_NUMERIC;
}
else if (cellValue != null)
{
 cellType = Cell.CELL_TYPE_STRING;
}
cell.setCellValue(cellValue);

9 个答案:

答案 0 :(得分:6)

The API now provides a corresponding method

public void addIgnoredErrors(CellRangeAddress region,
                    IgnoredErrorType... ignoredErrorTypes)

答案 1 :(得分:2)

显然,Apache POI目前无法实现这一点。关于这个主题有很多错误报告/ RFE:

https://issues.apache.org/bugzilla/show_bug.cgi?id=58641

https://issues.apache.org/bugzilla/show_bug.cgi?id=54868

https://issues.apache.org/bugzilla/show_bug.cgi?id=46136

实际属性(忽略此类警告的属性)以Excel持久格式存在,并以每个单元格为基础进行记录。据我所知,从错误报告中可以看出,Apache POI并没有公开它。

为了让您了解Excel的xlsx格式中的内容:

</worksheet>
    ...
    <ignoredErrors>
        <ignoredError sqref="K192 E181 E186" numberStoredAsText="1"/>
    </ignoredErrors>    
</worksheet>

我在某处读到这只是xlsx(即OOXML),而不是xls格式,这意味着如果Apache POI团队实现这一点,那么它将在XSSF中封装

答案 2 :(得分:1)

对我来说,上述解决方案都没有奏效,但最后通过一些有问题的解决方法摆脱了警告:将值写成这样的公式。

String asFormula = "\"" + value + "\"";
cell.setCellType(SXSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula(asFormula);

不要认为它总是一个好的解决方案,但在我的情况下,输出文件的值永远不会被修改。但它可能对某人有所帮助。

我正在使用apache POI的3.14版,以防它有所不同(我在解决方法之前尝试了几个不同的版本,没有任何效果)。

答案 3 :(得分:0)

cell type设置为:

HSSFRow row = sheet.createRow(sheet.getLastRowNum());
HSSFCell cell = row.createCell(0);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellType(Cell.CELL_TYPE_NUMERIC);

对于字母数字和Character单元格类型,数字为Cell.CELL_TYPE_STRING,单元格类型为CELL_TYPE_NUMERIC

您可以从CellHSSFCell文档中获取有关单元格类型的更多信息。

答案 4 :(得分:0)

旧的但是它仍然可以帮助.NET中的一个人使用NPOI

我试过

cell.SetCellType(NPOI.SS.UserModel.CellType.NUMERIC); 

根本没有帮助。但以下代码将起作用

dCell.setCellValue(Convert.ToDouble(112.45)); //.NET syntax

dCell.setCellValue(new Double("123"));  // Java Syntax

答案 5 :(得分:0)

我遇到了同样的问题。我通过检查数据是否为Integer / Float并相应地设置条件(CELL_TYPE)来解决它。请找到代码段:

if(!isInteger(data))
            {
            cell.setCellValue(data);
            }
            else
            {
                cell.setCellType(Cell.CELL_TYPE_NUMERIC);
                cell.setCellValue(Float.parseFloat(data));//.parseInt(data));   
            }
public static boolean isInteger(String s) {
    try { 
        java.lang.Float.parseFloat(s); 
    } catch(NumberFormatException e) { 
        return false; 
    }
    return true;
}

这里的数据是来自数据源列表数组的字符串(excel / csv) 这解决了绿色警告。

答案 6 :(得分:0)

我知道问这个问题已经很长时间了,但是仍然... 您尝试过这个吗?

DataFormat df = workbook.createDataFormat();
cellStyle.setDataFormat(df.getFormat("@"));

答案 7 :(得分:0)

古老但仍然有意义。

您应该使用“。”在文本中用作小数点分隔符,并将单元格格式设置为NUMERIC。

还要使用带有模式“#.00”和瞧的DataFormat!没有警告,一切都很好。

cell.setCellType(Cell.CELL_TYPE_NUMERIC);
cell.setCellValue(Double.parseDouble(data));
DataFormat format = hwb.createDataFormat();
CellStyle numbercellStyle = hwb.createCellStyle();
numbercellStyle.setDataFormat(format.getFormat("#.00"));
cell.setCellStyle(numbercellStyle);

答案 8 :(得分:0)

简单,您也可以在poi 4.1.1中使用以下代码

cell.setCellValue(Double.parseDouble(yourvalue));