首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C# OpenXML确定值是数字还是共享字符串

C# OpenXML是一种用于处理Office文档的开源库,可以通过编程方式创建、读取和修改各种Office文件,包括Word文档、Excel表格和PowerPoint演示文稿等。

在C# OpenXML中,确定值是数字还是共享字符串是通过查看单元格的数据类型来实现的。每个单元格都有一个DataType属性,用于指示单元格中存储的数据类型。

如果DataType属性的值为Number,则表示该单元格中存储的是数字类型的数据。可以通过访问单元格的InnerText属性来获取该数字值。

如果DataType属性的值为SharedString,则表示该单元格中存储的是共享字符串类型的数据。共享字符串是一种优化机制,可以减少重复字符串的存储空间。可以通过访问单元格的InnerText属性来获取该共享字符串的索引值,然后通过访问共享字符串表(SharedStringTable)来获取实际的字符串值。

C# OpenXML提供了一些方便的方法和属性来处理这些情况。例如,可以使用CellValues.Number枚举值来设置单元格的DataType属性为Number类型,使用CellValues.SharedString枚举值来设置单元格的DataType属性为SharedString类型。

以下是一个示例代码,演示如何确定值是数字还是共享字符串:

代码语言:txt
复制
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;

public static void DetermineValueType(string filePath, string sheetName, string cellReference)
{
    using (SpreadsheetDocument document = SpreadsheetDocument.Open(filePath, false))
    {
        WorkbookPart workbookPart = document.WorkbookPart;
        Sheet sheet = workbookPart.Workbook.Descendants<Sheet>().FirstOrDefault(s => s.Name == sheetName);
        
        if (sheet != null)
        {
            WorksheetPart worksheetPart = (WorksheetPart)workbookPart.GetPartById(sheet.Id);
            Cell cell = worksheetPart.Worksheet.Descendants<Cell>().FirstOrDefault(c => c.CellReference == cellReference);
            
            if (cell != null)
            {
                if (cell.DataType != null && cell.DataType.Value == CellValues.SharedString)
                {
                    int sharedStringIndex = int.Parse(cell.InnerText);
                    SharedStringTablePart sharedStringPart = workbookPart.SharedStringTablePart;
                    string sharedStringValue = sharedStringPart.SharedStringTable.Elements<SharedStringItem>().ElementAt(sharedStringIndex).InnerText;
                    
                    Console.WriteLine("Value is a shared string: " + sharedStringValue);
                }
                else
                {
                    double numericValue = double.Parse(cell.InnerText);
                    Console.WriteLine("Value is a number: " + numericValue);
                }
            }
        }
    }
}

这是一个简单的示例,可以根据给定的文件路径、工作表名称和单元格引用来确定单元格中存储的值是数字还是共享字符串。根据实际情况,你可以根据需要进行修改和扩展。

腾讯云提供了一系列与Office文档处理相关的产品和服务,例如腾讯文档(https://cloud.tencent.com/product/twp),可以满足各种办公场景下的文档协作和管理需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java的字符串传递还是引用传递

Java的字符串传递还是引用传递 这是Java的经典问题。关于stackoverflow,已经提出了许多类似的问题,并且有很多不正确/不完整的答案。如果您考虑不多,问题很简单。...常见的令人困惑的问题 x存储指向堆中"ab"字符串的引用。因此,当x作为参数传递给change()方法时,它仍指向堆中的"ab",如下所示: 因为java传递,所以x的对"ab"的引用。...代码实际上做什么的? 上面的解释有几个错误。为了轻松理解这一点,最好简要介绍一下整个过程。 创建字符串"ab"时,Java会分配存储字符串对象所需的内存量。...变量x包含对字符串对象的引用。x本身不是参考!它是一个存储引用(内存地址)的变量。 Java仅按传递。将x传递给change()方法时,将传递x的副本(引用)。...变量x更改其引用(改为"cd"),而不是引用本身。 下图显示了它的实际作用。 4.错误的解释 第一个代码片段引起的问题与字符串不变性无关。

89420

dotnet 使用 OpenXML SDK 解析 Office 的项目符号 buNone 含义

入门的文档请看 C# dotnet 使用 OpenXml 解析 PPT 文件 在 Office 的段落里面可以使用 表示当前这一段不要显示项目符号,而这个属性的作用还需要小伙伴动手改一下...为什么没有项目符号一个属性?为什么不是没有设置项目符号就是没有项目符号?其实这里涉及一个命名问题,在 OpenXML SDK 里面给了一个很好理解的命名 NoBullet 也就是不要项目符号。...当然此时的 WPS 玩不过 Office 的,在 WPS 里面解析错了,将项目符号显示出来 从微软官方文档 NoBullet Class (DocumentFormat.OpenXml.Drawing.../en-us/dotnet/api/documentformat.openxml.drawing.nobullet ) // 按照微软文档无论前面是否写了项目符号的字体还是定义了项目符号...-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

73210

dotnet OpenXML 修复 Office 文档里面的百分比内容包含百分号

我在解析一个 PPT 文档的时候,发现了这个 PPT 文档的背景色的透明度百分比的字符串里面包含了百分号,而不是一个 OpenXml 里面的百分比单位 这份 PPT 文档的背景内容如下 可以看到背景的 a:alpha 的 Val 一个包含了百分号的字符串...这个和 OpenXML 的单位定义的百分比不相同,从 Office Open XML 的测量单位 可以了解到默认使用的千分之一的百分比,也就是默认的字符串一个整数的数值,其中数值的一千就代表百分之一的...SDK 里面将 alpha 的 Val 认为一个 Int32Value ,因此在转换的时候就会失败。...dotnet OpenXML 解压缩文档为文件夹工具 工具协助测试的,这个工具开源免费的工具,欢迎小伙伴使用 更多请看 Office 使用 OpenXML SDK 解析文档博客目录

51630

dotnet OpenXML 转换 PathFillModeValues 为颜色特效

OpenXml 预设形状,有一些形状设置了 PathFillModeValues 枚举,此枚举提供了亮暗的蒙层特效。具体的特效让形状选择一个画刷,在画刷上加上特效。...Path字符串 /// OpenXml的Path Fill Mode /// <param...不过通过编写代码的形式也是可以的,详细请看 dotnet OpenXML SDK 形状几何 Geometry 的计算公式含义 为了简化代码,在 GetPresetGeometryPath 方法里面使用的我用公式引擎计算的输出字符串...dotnet OpenXML 解压缩文档为文件夹工具 工具协助测试的,这个工具开源免费的工具,欢迎小伙伴使用 更多请看 Office 使用 OpenXML SDK 解析文档博客目录 后续解析引擎也许会开源...如果你想持续阅读我的最新博客,请点击 RSS 订阅,推荐使用RSS Stalker订阅博客,或者前往 CSDN 关注我的主页 本作品采用 知识共享署名-非商业性使用-相同方式共享

80520

dotnet OpenXML 解析 PPT 图表 面积图入门

对于默认面积图来说,纵坐标属于一个运行时属性,不会存放在 OpenXML 文档里面,需要根据每个系列的数值的最大和最小以及配置,计算出来纵坐标的内容,本文不会涉及具体的坐标轴计算方法 数据系列...本文将在 C# dotnet 使用 OpenXml 解析 PPT 文件 的基础上进行开发 先读取 PPT 文档 var file = new FileInfo("Test.pptx...在实际项目里,需要判断图表元素所在的页面还是页面模版等,不能和以下代码写固定从页面获取 // 如果放在模版里面,记得要用模版的 Part 去获取 var...例如 NumberReference 类型表示的数值引用,例如 StringReference 表示字符串引用类型,在这份课件里面存放的 StringReference 类型,以下代码只演示采用 StringReference...var numericValueText = numericValue.Text; valueList.Add(numericValueText); } 通过上面例子,无论数据引用是数值引用还是字符串引用

85530

dotnet OpenXML SDK 形状几何 Geometry 的计算公式含义

原因 OpenXML 的形状采用的坐标系和 DirectX 的坐标系相同,左上角 0,0 点,从上到下 y 的不断加大。...原因 OpenXML 的形状采用的坐标系和 DirectX 的坐标系相同,左上角 0,0 点,从上到下 y 的不断加大。...: 符号表示,和 C# 里面的 ?: 逻辑相同,需要传入三个参数,假定参数 x y z 三个参数,判断如果传入的 x 大于 0 那么则是 true 代码如下 "?...相当于 var 的定义,表示的 val 公式,将会返回对应的 如 val x 就是返回 x 的 如需要转换为 SVG 的字符串,请看 dotnet OpenXML 让 PathLst 自定义形状转...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

37810

C# dotnet 使用 OpenXml 解析 PPT 元素的坐标和宽度高度

本文将告诉大家如何从 PPT 里面解析出通用元素的 x 和 y 的,以及元素的宽度和高度的 在开始之前请看 C# dotnet 使用 OpenXml 解析 PPT 文件 在拿到 slidePart.Slide.CommonSlideData.ShapeTree...var shapeProperties = element.GetFirstChild(); 上面代码的 element OpenXmlElement...; using Drawing = DocumentFormat.OpenXml.Drawing; using ShapeProperties = DocumentFormat.OpenXml.Presentation.ShapeProperties...= new Emu(offset.X.Value); var offsetY = new Emu(offset.Y.Value); 在 PPT 里面,通用元素的 x 和 y 单位...Emu 上面的类我自己定义的,有可以抄的代码,请看 C# dontet Office Open XML Unit Converter 我定义了和像素转换的代码 可以通过 Extents 也就是 a:

1.6K10

dotnet OpenXML 文本删除线解析方法

本文来告诉大家如何解析读取在 OpenXML 里面存放的文本删除线,本文使用 PowerPoint 作为例子来告诉大家如何读取然后在 WPF 应用里面显示 在开始之前,期望大家已了解如何在 dotnet...应用里面读取 PPT 文件,如果还不了解读取方法,请参阅 C# dotnet 使用 OpenXml 解析 PPT 文件 期望在阅读本文之前,先阅读 dotnet OpenXML 简单聊聊 PPT 文本解析...以下本文效果 在 OpenXML 文档,将文本的删除线放在了文本的 Run 属性里面,大概内容如下 <a:rPr lang="en-US...和 WPF 的设计不同的<em>是</em>,在 WPF 里面,无论<em>是</em>下划线<em>还是</em>删除线等,都是属于文本装饰。但是在 PPT 里面,下划线<em>是</em>下划线,而删除线<em>是</em>删除线。...如果你想持续阅读我的最新博客,请点击 RSS 订阅,推荐使用RSS Stalker订阅博客,或者前往 CSDN 关注我的主页 本作品采用 知识<em>共享</em>署名-非商业性使用-相同方式<em>共享</em>

84810

dotnet OpenXML 为什么资源使用 Relationship 引用

协议里面要求多个 Part 也就是文件之间不能相互引用,如果两个 Part 有引用,需要在 Part 的 rels 文件里面添加引用,而在 Part 里面只使用对应的 rels 文件的记录资源的 Id 的.../media/image1.png"/> 使用 Relationship 定义 Id 的,用来给 slide1.xml 引用,同时配置资源类型,通过 Type 定义,...因为默认的 GetPartById 将会在找不到资源的时候抛出 ArgumentOutOfRangeException 而如果文档用户创建的,也许他用的 WPS 等软件做的文档不遵守标准,此时就会炸了...一般都可以确定 Id 是否存在,因为有 HyperlinkRelationships 和 DataPartReferenceRelationships 等属性的存在,可以通过这些属性进行判断 关于 Relationship...的一个应用请看 C# dotnet 使用 OpenXml 解析 PPT 里面的视频 更多请看 Office 使用 OpenXML SDK 解析文档博客目录 ---- 本文会经常更新,请阅读原文

45740

dotnet OpenXML 读取 PPT 内嵌 xlsx 格式 Excel 表格的信息

,插入 Excel 表格用的不是 OLE 文件的方式,而是放入一个 xlsx 文件 在 Slide.xml 页面里面,存放的在 GraphicFrame 下的内容,简化的 OpenXML 文档如下...通过如上代码可以看到在 Slide 页面存放的代码几乎相同,需要加上一点判断逻辑,才能决定是从 Part 读取还是从 OLE 文件读取 通过判断 part.ContentType "application.../vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 再加上判断当前的 Graphic 期望使用的应用 // 预期字符串...原因此 Stream 不支持随机访问的,这个 Stream 从 System.IO.Packaging 拿到的,为了解决 N 多的坑,设计为不支持随机读取,只能顺序读取。...Workbook.Sheets; 更多读取 Excel 的方法请看 C# dotnet WPF 使用 OpenXml 解析 Excel 文件 本文以上的测试文件和代码放在github 和 gitee 欢迎访问

1K20

dotnet OpenXml SDK 形状填充渐变色的主题色

,也就是这个空那么就是渐变将会丢失颜色,也就是形状填充丢失渐变色 从文档上看,形状属性定义里面没有 gsLst 的 <a:off x="611560" y...也就是没有 a:gs 定义颜色 这个问题 OpenXML a:gradFill without a:gsLst 渐变色里面没有 GradientStopList 的 而在这个形状一般都可以看到 ShapeStyle... 而这个样式要的属性 idx 属性,表示属于主题的哪个样式 那么在 OpenXML SDK 里面如何获取主题,如果在 Slide 页面的元素可以通过下面的代码获取主题...但是 FillStyleList 的数组 C# 的数组,下标从 0 开始 // FillReference reference, FormatScheme formatScheme if (...在 OpenXML SDK 里面没有给填充颜色一个基类,这部分的设计不是很好 在 PPT 文档里面对应的 ppt\theme\themex.xml 文件里面的 a:fillStyleLst 的 <a

42310

使用OPENXML函数将XML文档转换为行结果集

OPENXML的语法为: OPENXML( idoc int [ in] , rowpattern nvarchar [ in ] , [ flags byte [ in ] ] )  [ WITH ...Abel 若将代码中OPENXML函数的第三个参数换为2那么将返回2行NULL,因为2表示查询以元素为中心,而row节点下没有其他元素。...,Name nvarchar(50),Vendor nvarchar(50)) 实际上第三个参数无论跟任何正整数SQL Server 2005都不会报错,微软官方MSDN中只给出了0、1、2、8这4个数字的意思...其实SQL Server 2005内部根据第三个参数的二进制比特位上的确定查询的方式的。...最后2位00或01(比如:0、1、4、5等)就是以属性为中心进行查询,最后2为10(比如:2、6、10等)就是以元素为中心的查询,而最后2位11(比如:3、7等)就表示既要查询属性也要查询元素。

1.4K30

dotnet OpenXML 让 PathLst 自定义形状转 SVG 路径格式的 Geometry 内容

下面一个简单的 WPF 应用,读取这份文档的内容,将里面的形状显示出来 ?...在 PathList 里面可以选择的如下 MoveTo LineTo ArcTo QuadraticBezierCurveTo CubicBezierCurveTo CloseShapePath 刚刚好和..." Version="2.12.1" /> 在获取到了 Path 字符串之后,可以使用如下代码转换为 Geometry 元素 var geometry = Geometry.Parse...dotnet OpenXML 解压缩文档为文件夹工具 工具协助测试的,这个工具开源免费的工具,欢迎小伙伴使用 更多请看 Office 使用 OpenXML SDK 解析文档博客目录 ----...如果你想持续阅读我的最新博客,请点击 RSS 订阅,推荐使用RSS Stalker订阅博客,或者前往 CSDN 关注我的主页 本作品采用 知识共享署名-非商业性使用-相同方式共享

1.8K20
领券