我有一段代码(下面)可以获取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");
修改文字字符串,但这也不起作用。
你知道我错过了吗?
答案 0 :(得分:2)
Replace是一个字符串函数,它只返回新的字符串。您需要做的就是为InnerXml设置新值。
sharedStringTable.ElementAt(int.Parse(value)).InnerXml = sharedStringTable.ElementAt(int.Parse(value)).InnerXml
.Replace("value", "Modified");
答案 1 :(得分:1)
尝试添加
sharedStringTable.Save();
之后
sharedStringTable.ElementAt(int.Parse(value)).InnerXml
.Replace("value", "Modified");
答案 2 :(得分:0)
使用Replace的解决方案在文本的情况下会出现问题,这也是xml的一部分,就像只包含字母'm'的字符串一样。然后替换也将替换
中的m&LT; x:t xmlns:x = ...&gt;,使单元格无效。相反,替换FirstChild,它确实是InnerText,绕过了可替换文本的限制。
sharedStringTable.ElementAt(int.Parse(cell.CellValue.Text)).ReplaceChild(
new Text("Modified"), // OpenXmlElement
sharedStringTable.ElementAt(int.Parse(cell.CellValue.Text)).FirstChild
);