当前位置: 首页 > 知识库问答 >
问题:

克隆行时C#Excel XML错误

濮阳原
2023-03-14


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

XmlNode row = table.ChildNodes[6].CloneNode(true);
XmlNode row = table.ChildNodes[6];

此外,Table和WorksheetOptions的位置也会切换(Table是在WorksheetOptions之前,所以现在是在WorksheetOptions之后)。以下是整个测试代码


    using System;
    using System.Collections;
    using System.Xml;

    namespace TIS
    {
        class Program
        {
            static void Main(string[] args)
            {
                string loadPath = @"C:\Export Template.xml";
                string savePath = @"C:\Users\Ilija.DESKTOP-5Q1E02D\Desktop\Export Template Export.xml";


                XmlDocument xml = new XmlDocument();
                xml.Load(loadPath);

                XmlNamespaceManager nsmgr = new xmlNamespaceManager(xml.NameTable);
                nsmgr.AddNamespace("ss", "urn:schemas-microsoft-com:office:spreadsheet");
                XmlElement root = xml.DocumentElement;
                XmlNodeList nodeList = root.SelectNodes("//ss:Worksheet", nsmgr);

                //FIND "PL" SHEET
                XmlNode nSheet = xml.DocumentElement;
                foreach (XmlNode n in nodeList)
                    if (n.Attributes["ss:Name"].Value == "PL")
                        nSheet = n;

                //FIND TABLE NODE & CREATE OTHER NODES
                XmlNode table = nSheet.ChildNodes[0];
                XmlNode row = table.ChildNodes[6].CloneNode(true);
                XmlNode cell = row.ChildNodes[0];

                XmlNode lastRow = table.LastChild;
                table.RemoveChild(table.LastChild);

                //POPULATE NODES
                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 Code";
                row.ChildNodes[4].ChildNodes[0].InnerText = "tAmount";

                table.AppendChild(row);
                table.AppendChild(lastRow);
                nSheet.AppendChild(table);

                //xml.DocumentElement.RemoveChild(xml.DocumentElement.LastChild);
                //xml.DocumentElement.AppendChild(nSheet);

                xml.Save(savePath);

                /*
                IEnumerator ienum = nodeList.GetEnumerator();
                while (ienum.MoveNext())
                {
                    XmlNode title = (XmlNode)ienum.Current;
                    Console.WriteLine(title.InnerText);
                }
                //*///

                wl("end");
                wait();
            }

            static void wl(string message = "")
            {
                Console.WriteLine(message);
            }
            static void wait()
            {
                Console.ReadLine();
            }
        }
    }

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

共有1个答案

邹京
2023-03-14

在这里回答我自己的问题。
错误是一个wierd错误。我不得不尝试编辑.xml文件manualy,并认为excel不能工作,因为我有一个 witch类型是numeric( ),并且我将该数据的值设置为=“”,所以它产生了一个错误。此外,一个空行(代码中的lastRow)不是表中的最后一行(我知道,对...)。无论如何,如果有类似的错误,请按照Excel记录的路径操作,在我的示例中,它是“C:\users\ilija.desktop-5q1e02d\appdata\local\microsoft\windows\inetcache\content.mso\ba6d17ad.log”。在开始搜索“运行”中,键入%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:  

如前所述,错误是该值为空字符串。填充它,它应该工作正常。

 类似资料:
  • 本文向大家介绍详解 c# 克隆,包括了详解 c# 克隆的使用技巧和注意事项,需要的朋友参考一下 克隆方法是原型设计模式中必须使用的方式,它将返回一个与当前对象数据一致的对象。正如其名,犹如一个模子雕刻而出。克隆类型分为两种:浅克隆、深克隆。 1、浅克隆 浅克隆方式是最简单、最直接的方式。只需要类实现接口ICloneable(在命名空间System.Runtime.InteropServices下)

  • 我是新来的,从克隆存储库时出现以下错误。 我试图在这里搜索所有相关问题,但可以找到确切的stacktstrace和答案。 我正在尝试克隆需要用户名和密码的存储库,我正在作业配置设置中为我的作业提供存储库路径。我什么也没做。ssh相关设置,因为这似乎与GIT存储库的安全问题不同。 我不知道Jenkins试图执行什么注释,也不知道它找到了哪个文件/目录。 这是我在詹金斯工作中的确切堆栈跟踪: 原因:j

  • 问题内容: 我是新手,从克隆存储库时出现以下错误。 我试图在这里搜索所有相关问题,但可以找到确切的stacktstrace和答案。 我正在尝试克隆需要用户名和密码的存储库,我在作业的工作配置设置中提供了存储库路径。我尚未进行任何与.ssh相关的设置,因为这似乎是与GIT存储库的安全性问题不同的问题。 我不知道詹金斯想执行什么注释,它找不到哪个文件/目录。 这是我从詹金斯工作得到的确切堆栈跟踪: 引

  • 更新:该错误似乎与我拥有的.babelrc文件有关: 当我移除这个文件时,错误就消失了。 原帖: 我正在使用React与包裹捆绑器。首先,我有一个问题,与我的包裹版本和@babel/preset-env(无效版本:未定义)不兼容有关。 我通过在package.json文件中添加一个resolutions标记来解决问题,以强制使用不需要version对象的以前版本的Babel。这起作用了,但现在我在

  • 问题内容: 如何克隆 Java并同时在Java中克隆其项目? 例如,我有: 我希望其中的对象与狗列表中的对象不同。 问题答案: 你将需要迭代这些项目,然后逐个克隆它们,然后将克隆放入结果数组中。 显然,要使该方法起作用,你将必须使你的类实现接口并重写该方法。

  • 问题内容: 我该怎么办 与JGIT库? 问题答案: 您不能,JGit尚不支持客户端上的浅表克隆(不过,它在服务器端上)。