c# - 如何使用 OpenXML SDK 获取应用格式(格式化单元格值)的单元格值

标签 c# .net openxml openxml-sdk

我一直在谷歌上搜索并在网站上搜索答案,但我找不到解决方案 - 到处都是人们主要讨论如何向文档添加新的数字格式并应用它。

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

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

所以在我看来,要获得值(value),我需要做两件事: 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 上找到这个问题的明确答案,因为我认为这将是许多开发人员在日常工作中需要的东西。

最佳答案

伙计们,这很难...我将在这里添加我发现可能有值(value)的东西..

首先是获取单元格的编号格式(一旦你有了 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 并且它可以工作,但仍然缺少一些东西。

我建议您查看此类并从方法 GetFormattedString() 获取代码,正如@El G 在他的评论中所说的那样。

基本上你必须添加这样的东西:

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

希望对你有帮助...

关于c# - 如何使用 OpenXML SDK 获取应用格式(格式化单元格值)的单元格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8929799/

相关文章:

.net - 以编程方式识别 Excel 版本

c# - 为什么此 Linq to XML 查询不起作用

c# - 访客屏幕分辨率

c# - 枚举尚未开始或已经完成

c# - 在 .NET 2.0 中将位图转换为一个多页 TIFF 图像

c# - 错误消息 : "Access to the path c:\windows\microsoft.net\framework\(version)\Temporary ASP.NET Files\(blah) is denied." - what causes this?

c# - OpenXML 2.0 获取错误的单元格值

css - 多个 css 类不起作用

c# - 如何使用 Open XML SDK 在 Word 中创建水平线?

c# - 如何在不使用编程语言的装箱支持的情况下将值设为 "box"?