考虑值为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。
以下是Standard ECMA-376 Office Open XML File Formats指定的隐含单元格格式集供参考 -
ID格式代码
0总则
1 0
2 0.00
3#,## 0
4#,## 0.00
9 0%
10 0.00%
11 0.00E + 00
12#?/?
13#?? / ??
14 mm-dd-yy
15 d-mmm-yy
16 d-mmm
17 mmm-yy
18 h:mm AM / PM
19小时:mm:ss AM / PM
20小时:mm
21小时:mm:ss
22 m / d / yy h:mm
37#,## 0;(#,## 0)
38#,## 0;红色
39#,## 0.00;(#,## 0.00)
40#,## 0.00;红色
45毫米:ss
46 [h]:mm:ss
47 mmss.0
48 ## 0.0E + 0
49 @
答案 0 :(得分:1)
您正在讨论的格式被定义为样式,当创建Cell时,使用样式索引相应地设置样式索引。通过引用number format
NumberFormatId
嵌入在这些样式中
Ex:在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
可以用于强制字符串单元格。
因此,当您尝试在常规单元格中提取格式代码时,如果未设置NumberFormatId
,则可能返回null;如果数字格式设置为常规类型,则可能返回 0 。
这解释了为什么您为数字格式化的单元格获得了正确的ID,但对于一般单元格则没有