在 XDocument 中使用 ':' 字符生成 Excel - C#

Posted

技术标签:

【中文标题】在 XDocument 中使用 \':\' 字符生成 Excel - C#【英文标题】:using ':' character in XDocument for Excel generation - C#在 XDocument 中使用 ':' 字符生成 Excel - C# 【发布时间】:2012-12-06 15:31:54 【问题描述】:

我对编程世界很陌生,所以这个问题可能很愚蠢,但我被困住了,希望能得到一些帮助。

我在项目中使用 XDocument 更改和添加信息到 Excel 工作表(这是一个 XML 文档),以便从 Autodesk Revit 中获取 Excel 报告。 工作表文档由工作表信息组成,包括此配置中的行和单元格:

<row r="11" spans="1:11" x14ac:dyDescent="0.2">
    <c r="A11" s="198" t="inlineStr">
        <is>
            <t>example</t>
        </is>
    </c>
    <c r="B11" s="199" t="inlineStr">
        <is>
            <t>string</t>
        </is>
    </c>
    <c r="C11" s="200"/>
    <c r="D11" s="201"/>
    <c r="E11" s="201"/>
    <c r="F11" s="202"/>
    <c r="G11" s="203"/>
    <c r="H11" s="204"/>
    <c r="I11" s="205"/>
    <c r="J11" s="205"/>
    <c r="K11" s="206"/>
</row>

代码的相关部分在行元素中。 spans-attribute 的值为“1:11”,这就是我的问题所在。它不会让我输入一个 ':' 字符作为属性的值。我在网上搜索过,发现它与这个链接的命名空间声明有关: "The ':' character, hexadecimal value 0x3A, cannot be included in a name"

但是,将这个 ':' 字符添加到属性值中对于 Excel 文档的工作是必不可少的。我按如下方式创建行元素:

XElement row = new XElement("row",
                    new XAttribute("r", i.ToString()),
                    new XAttribute("spans", "1:" + collumnCount.ToString()),
                    new XAttribute("x14ac:dyDescent", "0.2"));

我不明白为什么它不允许我在 XAttribute 的值中添加一个 ':',因为这只是一个字符串。有什么办法可以做到吗?

我尝试使用 XMLDocument 将字符串“1:11”添加到 XMLAttribute。这确实有效,但我不敢相信 XDocument 不可能。

提前致谢

【问题讨论】:

不是spans属性值 给你这个错误,而是属性名称 x14ac:dyDescent。你即将进入 xml 命名空间的美妙世界……祝你好运 :) 哎呀,我明白了...我太傻了 :) 谢谢您,先生,您的快速响应! 天哪,为什么这个问题仍然悬而未决? @AakashM 应该将此作为答案。 @AndréNeves 我觉得我有时间写的内容质量不足以成为答案。 【参考方案1】:

您应该在元素名称中包含 :。现在是允许的。如果您看到有人这样做,那 : 不是元素名称的一部分,它是命名空间和元素名称之间的分隔符。所以为了得到下面的XML文件:

<rss xmlns:media="http://m.xyz.com/rss/" version="2.0">
    <channel vendor="ABC" lastpublishdate="05/12/2013 01:02"/>
    <title>Videos</title>
    <media:thumbnail   />
</rss>

你必须写这样的东西:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace ConsoleApplication1

    class Program
    
        static void Main(string[] args)
        
            string x = "55";

            XNamespace aw = "http://m.xyz.com/rss/";
            XDocument document = new XDocument(
                new XDeclaration("1.0", "utf-8", "yes"), 
                new XElement(
                    "rss", 
                    new XAttribute(XNamespace.Xmlns + "media", "http://m.xyz.com/rss/"), 
                    new XAttribute("version", "2.0"),

                    new XElement("channel",
                        new XAttribute("vendor", "ABC"),
                        new XAttribute("lastpublishdate", DateTime.Now.ToString("dd/MM/yyyy hh:mm"))),

                        new XElement("title", "Videos"),
                        new XElement(
                            aw + "thumbnail", 
                            new XAttribute("width", x.Trim()), 
                            new XAttribute("height", x.Trim())
                        )
                )
            );
        
    

【讨论】:

以上是关于在 XDocument 中使用 ':' 字符生成 Excel - C#的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Xdocument 和 Linq 解析 xml 字符串

使用 XDocument 生成具有多个命名空间的 XML

从字符串填充 XDocument

当数据集WriteXml()函数生成xml文件时,C#如何使用XDocument类更新xml文件

XDocument保存后XML文件中的额外字符

强制 XDocument 使用 UTF-8 编码写入字符串