如何在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版本,以防万一(在变通办法之前我已经尝试了几个不同的版本,没有任何效果)。