为什么使用OpenXml SDKparsingexcel单元格时,单元格样式索引返回错误的CellFormat值?
考虑一个值为39.95的通用格式单元格。 当我获取CellFormat的单元格时,它返回错误的单元格格式 –
CellFormat thisCellFormat = ((CellFormat)cellFmts.ChildElements[(int)thisCell.StyleIndex.Value]); int fmtId = Convert.ToInt32(thisCellFormat.FormatId.Value);
返回的fmtId的值是1,在某些情况下是38,应该是2或39。
此问题仅适用于常规格式单元格,我正在为数字格式单元格获取正确的ID。
下面是标准的ECMA-376办公室开放XML文件格式指定隐含的单元格格式的参考 –
ID格式代码
0一般
1 0
2 0.00
3#,## 0
4#,## 0.00
9 0%
10 0.00%
11 0.00E + 00
12#?/?
13#?? / ??
14毫米 – 月 – 年
15 d-mmm-yy
16 d-mmm
17毫米 – 年
18小时:毫米上午/下午
19 h:mm:ss AM / PM
20小时:毫米
21 h:mm:ss
22米/日/年:毫米
37#,## 0;(#,## 0)
38#,## 0;红色
39#,## 0.00;(#,## 0.00)
40#,## 0.00;红色
45毫米:ss
46 [h]:mm:ss
47毫米
48 ## 0.0E + 0
49 @
您正在讨论的格式被定义为样式,并且在创build单元格时,将使用样式索引来相应地设置样式索引。 number format
通过引用NumberFormatId
embedded在这些样式中
例如:在Open XML中制作CellFormats,请注意区别
CellFormat cellformat0 = new CellFormat() { FontId = 0, FillId = 0, BorderId = 0 }; // default CellFormat cellformat1 = new CellFormat() { NumberFormatId = 0 }; CellFormat cellformat2 = new CellFormat() { NumberFormatId = 49 };
现在cellformat1
可以用于普通单元格, cellformat2
可以用于强制string单元格。
因此,当您尝试在常规单元格中提取格式代码时,可能会返回null,因为NumberFormatId
未设置,或者如果数字格式设置为常规types,则返回0 。
这就解释了为什么你为数字格式化的单元格获得正确的ID,而不是一般的单元格。