2016-02-29 2 views
1


У меня странная проблема, и я новичок в этой теме XML.
Я добавляю строки в файл XML, который должен быть «открыт» с помощью Excel.
Теперь я копирую одну строку таблицы и редактирую ее, а затем снова добавляю ее в эту таблицу. Уловка в том, что если я, когда получаю эту строку, использую строку: C# Excel XML ошибка при клонировании строки

XmlNode row = table.ChildNodes[6].CloneNode(true);
Я не могу открыть XML-файл, но, если я его использую следующим образом:
XmlNode row = table.ChildNodes[6];
, тогда я могу открыть XML-файл, но строка фактически отредактирована и перемещен вниз, то есть новая строка не добавляется. Основная «проблема», которая у меня есть, заключается в понимании того, что происходит здесь, потому что когда я пытаюсь открыть неработающий .xml-файл (который создается, когда я использую первую указанную строку), я получаю ошибку в excel enter image description here

Также , таблицы и места 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, приветствуются.

ответ

0

Отвечая на мой собственный вопрос здесь.
Ошибка была странной.

я должен был попробовать редактирование файл Мануалы .xml, и понял, что не будет работать первенствовать, потому что у меня был < клетки>, который имел < данных> тип ведьма Числовой (< Cell> < данные сс: Тип = «Числовой» > </Data> </Cell>), и я установил значение этих данных в значение = "", поэтому возникла ошибка. Кроме того, пустая строка (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: 

Как уже упоминалось, ошибка заключается в том, что VALUE является пустой строкой. Заполните его, и он должен работать нормально.

Смежные вопросы