Я новичок в 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();
}
Вопросы, требующие кода, должны демонстрировать минимальное понимание решаемой проблемы. Включите попытки решения, почему они не работают, и ожидаемые результаты. ' – tnw
Может помочь вам прочитать [about] (http://stackoverflow.com/about). – pnuts