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

我正在使用apache poi api来在我的应用程序中生成Excel表格。 在Excel中设置的数据将通过stringtypesdynamic传递。 对于column1,值是字母数字 。 当我生成Excel时,它会给我一个警告“数字存储为文本”或单元格上的“2位数字的文本date ”的绿色指示。

我想删除该警告。 我发现从excel中我们可以标记一个单元格为“忽略错误”,忽略这个警告。

如何做到这一点编程或有任何其他的替代scheme来实现这一任务?

我也附上了绿色标记显示警告的截图。

在这里输入图像说明

代码:

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

API现在提供了相应的方法

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

显然这对于​​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持久格式中存在的实际属性(忽略此类警告的属性)以每个单元格为基础进行logging。 就我所知,这些只是Apache POI没有公开的信息。

为了让你对Excel的xlsx格式有什么看法:

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

我读过的地方,这只是在xlsx (即OOXML),而不是xls格式,这意味着如果和当Apache POI团队实现这个将在XSSF包中。

设置像这样的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单元格types将为Cell.CELL_TYPE_STRING为数字,单元格types将为CELL_TYPE_NUMERIC

您可以从Cell和HSSFCell文档中获得更多有关单元types的信息。

老一个,但仍然这将有助于从.NET的一些谁使用NPOI

我试过了

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

根本没有帮助。 但下面的代码将工作

 dCell.setCellValue(Convert.ToDouble(112.45)); //.NET syntax dCell.setCellValue(new Double("123")); // Java Syntax 

我面临同样的问题。 我解决它通过检查数据,如果它是一个整数/浮点数,并相应的条件(CELL_TYPE)。 请find代码片段:

 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)列表数组的string。这解决了绿色警告。

对于我来说,上面的解决scheme都没有工作,但最后摆脱了一些令人费解的解决方法的警告:写入这样的公式值。

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

不要以为这总是一个好的解决scheme,但在我的情况下,输出文件的值永远不会被修改。 但它可能有助于某人。

我使用的是Apache POI的3.14版本,以防万一(在变通办法之前我已经尝试了几个不同的版本,没有任何效果)。