У меня странная проблема, и я новичок в этой теме XML.
Я добавляю строки в файл XML, который должен быть «открыт» с помощью Excel.
Теперь я копирую одну строку таблицы и редактирую ее, а затем снова добавляю ее в эту таблицу. Уловка в том, что если я, когда получаю эту строку, использую строку: C# Excel XML ошибка при клонировании строки
XmlNode row = table.ChildNodes[6].CloneNode(true);Я не могу открыть XML-файл, но, если я его использую следующим образом:
XmlNode row = table.ChildNodes[6];, тогда я могу открыть XML-файл, но строка фактически отредактирована и перемещен вниз, то есть новая строка не добавляется. Основная «проблема», которая у меня есть, заключается в понимании того, что происходит здесь, потому что когда я пытаюсь открыть неработающий .xml-файл (который создается, когда я использую первую указанную строку), я получаю ошибку в excel
Также , таблицы и места WorksheetOptions переключаются (таблица была перед 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, и это не сработало. Я также добавил WorksheetOptions из оригинальной трамплины, и возникла ошибка. Имейте в виду: я новичок в xml в C#. Любые предложения о том, как добавлять строки в Workbook/Worksheet/Table, приветствуются.