【问题标题】:C# Excel XML error when cloning row克隆行时出现 C# Excel XML 错误
【发布时间】:2016-02-29 16:10:16
【问题描述】:


我有一个奇怪的问题,我对这个 XML 主题不熟悉。
我正在向 XML 文件中添加行,该文件应该可以使用 Excel“打开”。
现在,我复制一个表行,对其进行编辑,然后再次将其添加到该表中。问题是,如果我在获取该行时使用 line:

XmlNode row = table.ChildNodes[6].CloneNode(true);
我无法打开 .xml 文件,但是,如果我这样使用它:
XmlNode row = table.ChildNodes[6 ];
然后我可以打开.xml文件,但是行实际上是被编辑并移动到底部的,即没有添加新行。我遇到的主要“问题”是了解这里发生了什么,因为当我尝试打开非工作的 .xml 文件(当我使用提到的第一行时创建的)时,我在 excel 中出现错误

另外,Table 和 WorksheetOptions 的位置也交换了(Table 在 WorksheetOptions 之前,所以现在它在 WorksheetOptions 之后)。这是整个测试代码

使用系统; 使用 System.Collections; 使用 System.Xml; 命名空间 TIS { 课堂节目 { 静态无效主要(字符串 [] 参数) { string loadPath = @"C:\Export Template.xml"; string savePath = @"C:\Users\Ilija.DESKTOP-5Q1E02D\Desktop\Export Template Export.xml"; XmlDocument xml = 新的 XmlDocument(); xml.Load(loadPath); XmlNamespaceManager nsmgr = new xmlNamespaceManager(xml.NameTable); nsmgr.AddNamespace("ss", "urn:schemas-microsoft-com:office:spreadsheet"); XmlElement 根 = xml.DocumentElement; XmlNodeList nodeList = root.SelectNodes("//ss:Worksheet", nsmgr); //找到“PL”表 XmlNode nSheet = xml.DocumentElement; foreach(节点列表中的 XmlNode n) if (n.Attributes["ss:Name"].Value == "PL") nSheet = n; //查找表节点并创建其他节点 XmlNode 表 = nSheet.ChildNodes[0]; XmlNode 行 = table.ChildNodes[6].CloneNode(true); XmlNode 单元格 = row.ChildNodes[0]; XmlNode lastRow = table.LastChild; table.RemoveChild(table.LastChild); //填充节点 row.ChildNodes[0].ChildNodes[0].InnerText = "tID"; row.ChildNodes[1].ChildNodes[0].InnerText = "tENG"; row.ChildNodes[2].ChildNodes[0].InnerText = "tSRB"; row.ChildNodes[3].ChildNodes[0].InnerText = "tItem 代码"; row.ChildNodes[4].ChildNodes[0].InnerText = "tAmount"; table.AppendChild(row); table.AppendChild(lastRow); nSheet.AppendChild(表); //xml.DocumentElement.RemoveChild(xml.DocumentElement.LastChild); //xml.DocumentElement.AppendChild(nSheet); xml.Save(保存路径); /* IEnumerator ienum = nodeList.GetEnumerator(); while (ienum.MoveNext()) { XmlNode 标题 = (XmlNode)ienum.Current; Console.WriteLine(title.InnerText); } //*/// wl("结束"); 等待(); } 静态无效 wl(字符串消息 =“”) { Console.WriteLine(消息); } 静态无效等待() { Console.ReadLine(); } } }

所以,我的问题是:为什么会突然出现这个错误,我可以做些什么来防止它/解决它?我尝试使用 Table 和 WorksheetOptions 切换位置,但没有成功。我还从原始模板中添加了 WorksheetOptions,并且错误仍然存​​在。请记住:我是 C# 中 xml 的新手。欢迎任何有关如何向工作簿/工作表/表格添加行的建议。

【问题讨论】:

    标签: c# xml excel cloning


    【解决方案1】:

    在这里回答我自己的问题。
    这个错误很奇怪。

    我不得不尝试手动编辑 .xml 文件,并认为 excel 无法工作,因为我有一个 女巫类型是数字( Data>) 并且我将该数据的值设置为 ="",因此它产生了错误。此外,空行(代码中的 lastRow)不是表中的最后一行(我知道,对...)。

    无论如何,如果您有任何此类错误,请按照 Excel 记录的路径进行操作,在我的情况下,它是“C:\Users\Ilija.DESKTOP-5Q1E02D\AppData\Local\Microsoft\Windows\INetCache\Content.MSO\BA6D17AD。日志”。在开始搜索“运行”中,键入 %appData%,然后继续按照 excel 的日志路径进行操作。我个人看不到文件夹 \INetCache\ ,所以我不得不手动输入路径。日志文件看起来像这样

    XML ERROR in Table
    REASON: Bad Value
    FILE:   C:\Users\Ilija.DESKTOP-5Q1E02D\Desktop\Export Template Export.xml
    GROUP:  Cell
    TAG:    Data
    VALUE:             
    
    XML ERROR in Table
    REASON: Bad Value
    FILE:   C:\Users\Ilija.DESKTOP-5Q1E02D\Desktop\Export Template Export.xml
    GROUP:  Cell
    TAG:    Data
    VALUE:  
    

    如前所述,错误在于 VALUE 是一个空字符串。填充它,它应该可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      • 2011-01-22
      • 2014-04-08
      • 2020-10-11
      • 1970-01-01
      相关资源
      最近更新 更多