Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用OpenXMLSDK使用应用格式(格式化单元格值)获取单元格值_C#_.net_Openxml_Openxml Sdk - Fatal编程技术网

C# 如何使用OpenXMLSDK使用应用格式(格式化单元格值)获取单元格值

C# 如何使用OpenXMLSDK使用应用格式(格式化单元格值)获取单元格值,c#,.net,openxml,openxml-sdk,C#,.net,Openxml,Openxml Sdk,我一直在谷歌上搜索答案,但我找不到解决方案——到处都有人在讨论如何在文档中添加新的数字格式并加以应用 我需要的是将单元格值获取为具有应用格式的字符串,即与Excel显示的字符串相同的字符串 我已经想到,没有简单的方法或内置函数可以返回单元格的现成格式值 因此,在我看来,要获得价值,我需要做两件事: 1.获取格式字符串。 2.使用此字符串格式化单元格值 但这两个步骤我都有问题 可以很容易地获得CellFormat实例,该实例将包含NumberFormatId: CellFormat cellFor

我一直在谷歌上搜索答案,但我找不到解决方案——到处都有人在讨论如何在文档中添加新的数字格式并加以应用

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

我已经想到,没有简单的方法或内置函数可以返回单元格的现成格式值

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

但这两个步骤我都有问题

可以很容易地获得CellFormat实例,该实例将包含NumberFormatId:

CellFormat cellFormat = (CellFormat) document.WorkbookPart.WorkbookStylesPart.Stylesheet.CellFormats.ElementAt(cell.StyleIndex);
但是,如果id对应于一种标准的预定义格式,那么如何使用这个NumberFormatId获取格式字符串呢?(即低于160)它们不在电子表格文档中,我不相信它们应该在应用程序中硬编码

此外,一旦以某种方式获得了格式字符串,如何将其应用于单元格值?据我所知,代码应该检查单元格值的类型,如果是数字,则使用格式字符串将其转换为字符串

我发现其中提到使用Microsoft.Office.Excel.Interop,但我更愿意只使用OpenXMLSDK


总的来说,我很惊讶在网上很难找到这个问题的确切答案,因为我认为这将是许多开发人员在日常工作中所需要的。。。我会在这里添加一些我认为值得的东西

首先是获取单元格的编号格式(一旦获得单元格格式:

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

希望它能帮助您……

如果您希望采用与Excel中显示的格式相同的单元格值,请使用单元格对象的.Text属性。如下所示:

String formattedValue = cell.Text

非常感谢您分享此信息,Guido!请告诉我您是否能找到应用此格式的方法。另一方面,如果在您的解决方案中,您不必仅限于OpenXML SDK,您可以使用库,其中的所有操作似乎比纯OpenXML中的要简单得多(并且它构建在OpenXML之上)中的ClosedXML文档中有一行:“String booleanFormattedString=cellBoolean.GetFormattedString()在CellValue下显示(它不是Excel中显示的内容)
String formattedValue = cell.Text