使用SharedStringTable与.NET XML SDK设置文本值(Set text val

2019-10-16 21:10发布

我有一段代码(如下图),可以得到在Excel中特定细胞的文字,但我不知道如何修改这个文本以更改单元格文本。

public static void UpdateTextCell(string docName, string text, uint rowIndex, 
    string columnName, string sheetName)
{
   // Open the document for editing.
   using (SpreadsheetDocument spreadSheet = SpreadsheetDocument
       .Open(docName, true))
   {
        WorksheetPart worksheetPart = GetWorksheetPartByName(spreadSheet, 
            sheetName);

        if (worksheetPart != null)
        {

          SharedStringTablePart sharedstringtablepart=spreadSheet.WorkbookPart
              .GetPartsOfType<SharedStringTablePart>().First();
          SharedStringTable sharedStringTable = sharedstringtablepart
              .SharedStringTable;
          Cell cell = GetCell(worksheetPart.Worksheet, columnName, rowIndex);
          if (cell.DataType.Value == CellValues.SharedString)
          {
             var value = cell.InnerText;
             value = sharedStringTable.ElementAt(int.Parse(value)).InnerText;
             sharedStringTable.ElementAt(int.Parse(value)).InnerXml
                 .Replace("value", "Modified");
          }
          // Save the worksheet.
          worksheetPart.Worksheet.Save();
        }
   }
}

由于sharedStringTable.ElementAt(int.Parse(value)).InnerText为只读,我试图修改使用文本字符串sharedStringTable.ElementAt(int.Parse(value)).InnerXml.Replace("value", "Modified"); 但是这也不行。

你知道我失踪?

Answer 1:

尝试添加

sharedStringTable.Save();

sharedStringTable.ElementAt(int.Parse(value)).InnerXml
                 .Replace("value", "Modified");


Answer 2:

取而代之的是一个字符串函数,它只是返回新的字符串。 所有你需要做的是为InnerXml设置新的价值。

sharedStringTable.ElementAt(int.Parse(value)).InnerXml = sharedStringTable.ElementAt(int.Parse(value)).InnerXml
             .Replace("value", "Modified");


Answer 3:

与更换溶液以文本,这也是XML的一部分,就像只包含字母“M”的字符串的情况下承载的问题。 然后替换还将更换米

<X:吨的xmlns:X = ...>,致使细胞无效。 相反,进行更换操作则firstChild,这确实是的innerText,绕过更换的文本的限制。

sharedStringTable.ElementAt(int.Parse(cell.CellValue.Text)).ReplaceChild(
    new Text("Modified"),  // OpenXmlElement 
    sharedStringTable.ElementAt(int.Parse(cell.CellValue.Text)).FirstChild
);


文章来源: Set text value using SharedStringTable with xml sdk in .net