我正在使用OpenXML Spreadsheet来生成带有给定模板和变量字典的.xlsx文件。但是在更新SharedStringTable中的值时我有一个问题,因为SharedStringItem的InnerText是只读的。 我的模板excel文件是一个带.xlsx的文件。我需要替换的变量有前缀“$$$”。例如,“$$$ abc”,然后在字典中我可能有<“abc”,“Payson”>对(如果字典不包含键“abc”,只需在其中留下“$$$ abc”。 我所做的就是这样的事情
private void UpdateValue(WorkbookPart wbPart, Dictionary<string, string> dictionary)
{
var stringTablePart = wbPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault();
if (stringTablePart == null)
{
stringTablePart = wbPart.AddNewPart<SharedStringTablePart>();
}
var stringTable = stringTablePart.SharedStringTable;
if (stringTable == null)
{
stringTable = new SharedStringTable();
}
//iterate through all the items in the SharedStingTable
// if there is any text starts with $$$, find out the name of the string
// look for the string in the dictionary
// replace it if found, or keep it if not.
foreach (SharedStringItem item in stringTable.Elements<SharedStringItem>())
{
if (item.InnerText.StartsWith("$$$"))
{
string variableName = item.InnerText.Substring(3);
if (!string.IsNullOrEmpty(variableName) && dictionary.containsKey(variableName))
{
// The problem is here since InnerText is read only.
item.InnerText = dictionary[variableName];
}
}
}
}
即使文档提到可以设置innertext,但是没有set accessor。 有谁知道如何设置InnterText。因为我可能有许多具有相同变量名称“$$$ abc”的单元格,并且我想用“Payson”替换所有单元格。
答案 0 :(得分:0)
您似乎需要替换InnerXml,然后保存SharedStringTable。请参阅Set text value using SharedStringTable with xml sdk in .net。
答案 1 :(得分:0)
我尝试编辑文字,但它确实有效。
Text newText = new Text();
newText.Text = dictionary[variableName];
item.Text = newText;
stringTable.Save();