2013-09-12 3 views
0

Я новичок в stackoverflow, и это мой первый пост. Я работаю над проектом, где у меня есть выбор для выбора данных из листа Excel и вставки его в другой Excel, содержащий шаблон. Выбранные данные хранятся в промежуточном XML, который хранится в отдельном листе excel. Поскольку ячейка excel имеет ограничение символов для 32767 символов, поэтому XML разбивается на подстроки 32767 символов, а затем каждая подстрока хранится в разных ячейках. Проблема заключается во время чтения, когда все строки объединены, чтобы получить полный xml, который он поврежден. Поэтому я подумал о текстовом поле в качестве замены для хранения этого xml. Поскольку текстовое поле имеет довольно большой лимит символов. Итак, я хочу добавить элемент управления текстовым полем в лист Excel. Я использую C#. Как это сделать? Спасибо заранее.Добавить текстовое поле для листа excel

Вот этот код, который используется.

private XmlDocument GetXml() 
    { 
     Excel.Workbook WB = Globals.ThisAddIn.Application.ActiveWorkbook; 
     Excel.Worksheet ws = null; 
     XmlDocument xmlDoc = new XmlDocument(); 
     string strXml = string.Empty; 
     int XmlColumn = 1; 
     try 
     { 
      ws = WB.Sheets["XML"]; 
      while (ws.Cells[XmlColumn, 1].Value != null) 
      { 
       strXml = strXml + ws.Cells[XmlColumn, 1].Value.ToString(); 
       XmlColumn++; 
      } 
      if (strXml != "") 
       xmlDoc.LoadXml(strXml); 
      else 
      { 
       XmlNode RootNode = xmlDoc.CreateElement("R"); 
       XmlNode TaggingXmlDocNode = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null); 
       xmlDoc.AppendChild(TaggingXmlDocNode); 

       XmlNode RawExcel = xmlDoc.CreateElement("RawExcel"); 
       RawExcel.InnerText = Globals.ThisAddIn.Application.ActiveWorkbook.Name; 
       RootNode.AppendChild(RawExcel); 
       xmlDoc.AppendChild(RootNode); 

       ws.Cells[1, 1] = xmlDoc.OuterXml; 
      } 

     } 
     catch 
     { 
      xmlDoc = null; 
     } 
     return xmlDoc; 
    } 

    private void SaveXml(XmlDocument xmlDoc) 
    { 
     Excel.Workbook WB = Globals.ThisAddIn.Application.ActiveWorkbook; 
     Excel.Worksheet ws = null; 
     string strXml = string.Empty; 
     if (xmlDoc != null) 
     { 
      strXml = xmlDoc.OuterXml; 
      ws = WB.Sheets["XML"]; 
      int XmlColumn = 1; 
      string Temp = strXml; 
      for (int Len = 0; Len < strXml.Length; Len = Len + 32700, XmlColumn++) 
      { 
       if (Temp.Length >= 32700) 
       { 
        string s = Temp.Substring(0, 32699); 
        ws.Cells[XmlColumn, 1] = s.Substring(0, s.LastIndexOf('>') + 1); 
        int EndPoint = s.LastIndexOf('>'); 
        Temp = Temp.Substring(EndPoint + 1); 
       } 
       else 
       { 
        ws.Cells[XmlColumn, 1] = Temp; 
       } 
      } 
     } 
     else 
     { 
      xmlDoc = new XmlDocument(); 
      XmlNode RootNode = xmlDoc.CreateElement("R"); 
      XmlNode TaggingXmlDocNode = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null); 
      xmlDoc.AppendChild(TaggingXmlDocNode); 

      XmlNode RawExcel = xmlDoc.CreateElement("RawExcel"); 
      RawExcel.InnerText = Globals.ThisAddIn.Application.ActiveWorkbook.Name; 
      RootNode.AppendChild(RawExcel); 
      xmlDoc.AppendChild(RootNode); 

      ws = (Excel.Worksheet)WB.Sheets.Add(After: WB.Sheets[WB.Sheets.Count]); 
      ws.Name = "XML"; 
      ws.Cells[1, 1] = xmlDoc.OuterXml; 
      //ws.Visible = Excel.XlSheetVisibility.xlSheetVeryHidden;    
     } 
     WB.Save(); 
    } 
+2

Вопросы, требующие кода, должны демонстрировать минимальное понимание решаемой проблемы. Включите попытки решения, почему они не работают, и ожидаемые результаты. ' – tnw

+0

Может помочь вам прочитать [about] (http://stackoverflow.com/about). – pnuts

ответ

1

Я попытался добавить текстовое поле на листе и записать на него данные. Но это не помогает, потому что текстовое поле на листе excel имеет лимит символов для 32767 символов, аналогичных значению ячейки excel.

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