公式后未应用单元格格式

时间:2017-12-11 21:48:53

标签: apache-poi npoi

我正在使用NPOI。 我在Excel工作簿中读了两张表,作为我将生成的结果工作簿的“模板”。除了一些标题行之外,表单0是空的,而表单1具有多行公式。公式通常引用工作表0并从中提取数据。

我无法直接写入模板工作簿,因为我不得不将行移开,并且它会变得很难看,所以在代码中我创建了一个包含两张表的新结果工作簿。基于预设的配置文件,我逐行填充此结果工作簿的工作表0,从模板工作簿中克隆某些行的样式和公式。工作表0最终填充数据,而工作表1基本上是相对复制和调整的一行公式,通常在这里或那里通过小计算从工作表0中提取数据。 表单0中的所有数据都是文本,不能解释为数字,日期等。因此,我将数据单元格类型设置为String。

在代码I中,然后循环遍历表单1和EvaluateInCell中的所有单元格。 我这样做是为了显然评估公式,但也删除公式并保留复制/计算结果。这只是我正在做的工作的要求。我们提供最终结果,没有公式。 我保存了生成的工作簿。

一般情况下看起来不错,除非我有单元格格式,否则格式似乎不适用。 当我在Excel中获取单元格格式属性时格式化。 例如,我的数据中可能包含日期时间的文本数据,显示为: 7/7/2016 9:54:55 AM 这是原始数据文本,但在我的公式表上我有一个自定义单元格格式yyyymmdd。 然而,细胞仍然显示:7/7/2016 9:54:55 AM 在Excel中,我会执行类似手动编辑值的操作,例如删除最后一个'M'并重新键入'M'并按Enter键,该单元格将更改为所需格式并显示: 20160707 再次,格式化就在那里,它只是没有应用。

我不想手动编辑单元格,或者在我的客户在Excel中打开工作簿后执行任何操作。我希望生成的工作簿以格式化的值打开。 我尝试了一些看起来像是在黑暗中拍摄的东西,比如:

this.ResultWorkbook.GetCreationHelper()CreateFormulaEvaluator()EvaluateAll()。; ((XSSFWorkbook)this.ResultWorkbook).SetForceFormulaRecalculation(真);

但这没有用。 有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您可以在设置单元格的公式时尝试这个apprio中的任何一个

方法1

ICellStyle dateCellStyle = workbook.CreateCellStyle();
dateCellStyle.DataFormat = workbook.CreateDataFormat().GetFormat("yyyymmdd"); // Or prefix single quote for data when writing it to excel file like 'yyymmdd ex: '20160707

方法2

 XSSFCellStyle dateCellStyle = (XSSFCellStyle)workbook.CreateCellStyle();
 XSSFDataFormat dateDataFormat = (XSSFDataFormat)workbook.CreateDataFormat();
 dateCellStyle.SetDataFormat(dateDataFormat.GetFormat("yyyymmdd"));

答案 1 :(得分:0)

我最终查看了模板Excel文件我写入的单元格。看起来如果它不是DateUtil.IsCellDateFormatted并且cellStyle.DataFormat不是0x31(基于BuiltInFormats的文本),那么它必须是数字。 基于此我尝试将我的文本转换为DateTime或双倍适用,并使用这些转换的变量调用SetCellValue。否则我写文字。 这似乎适用于我遇到的情况。