我正在使用apache poi api
在我的应用程序中生成Excel工作表。在excel中设置的数据将以类型字符串动态显示。 对于column1,值为字母数字。当我生成Excel时,它会给我绿色指示,警告&#34;号码存储为文本&#34; 或&#34;文本日期为2位数年份&#34; < / strong> on cell。
我想删除该警告。 我发现从excel我们可以标记一个单元格,并忽略错误&#39;,忽略警告。
如何以编程方式执行此操作,还是有其他替代方法来完成此任务?
我还附上了屏幕截图,显示带有绿色标记的警告。
代码:
if (cellValue != null && (shouldBeRightAlign))
{
cellType = Cell.CELL_TYPE_NUMERIC;
}
else if (cellValue != null)
{
cellType = Cell.CELL_TYPE_STRING;
}
cell.setCellValue(cellValue);
答案 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
答案 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));