如何使用OpenXML SDK通过应用格式(格式化单元格值)获取单元格值

时间:2012-01-19 16:40:14

标签: c# .net openxml openxml-sdk

我一直在谷歌搜索并在网站上搜索答案,但我找不到解决方案 - 各地人们大多讨论如何在文档中添加新的数字格式并应用它。

我需要的是将单元格值作为带有应用格式的字符串 - 即与Excel显示的字符串相同。

我已经认为没有简单的方法或内置函数可以返回单元格的现成格式化值。

所以在我看来,要获得价值,我需要做两件事:  1.获取格式字符串。  2.使用此字符串格式化单元格值。

但是这两个步骤都有问题。

可以轻松获取包含NumberFormatId的CellFormat实例:

CellFormat cellFormat = (CellFormat) document.WorkbookPart.WorkbookStylesPart.Stylesheet.CellFormats.ElementAt(cell.StyleIndex);

但是如果id对应于标准预定义格式之一,如何使用此NumberFormatId获取格式字符串? (即低于160)它们不在电子表格文档中,我无法相信它们应该在应用程序中进行硬编码。

此外,一旦获得格式字符串,如何将其应用于单元格值?到目前为止我理解,代码应该检查单元格值的类型,如果是数字 - 使用格式字符串将其转换为字符串。

我发现this page提到了使用Microsoft.Office.Excel.Interop,但我更愿意继续使用OpenXML SDK。

总的来说,我很惊讶在Web上找到这个问题的确切答案是如此困难,因为我认为这将是许多开发人员在日常工作中需要的东西。

2 个答案:

答案 0 :(得分:8)

男人,这是一个艰难的...我会在这里添加我认为可能值得的东西..

首先是获取单元格的编号格式(一旦你有了CellFormat:

string format = excel.WorkbookPart.WorkbookStylesPart.Stylesheet.NumberingFormats.Elements<NumberingFormat>()
            .Where(i => i.NumberFormatId.ToString() == cellFormat.NumberFormatId.ToString())
            .First().FormatCode;

有关此内容的详情,请访问:NumberingFormats

我试图找出如何将此格式应用于cell.CellValue属性...我认为这就是你必须去的方式!

好的,阅读ClosedXml代码(它的开源代码)似乎很容易获得格式。

只需将值文本转换为其类型(int,double等),并调用传递格式的ToString方法。我正在尝试使用String.Format并且没有工作。我测试了ToString并且它可以工作,但仍然缺少一些东西。

我建议您查看这个类,并从@El G中的方法获取GetFormattedString()方法中的代码。

Bassicaly你必须添加这样的东西:

double d = double.Parse(cell.CellValue.InnerText);
string val = d.ToString(format);

希望它对你有所帮助......

答案 1 :(得分:0)

如果要使用应用格式获取单元格值,与Excel中显示的格式相同,请使用Cell对象的.Text属性。像这样:

String formattedValue = cell.Text