修改Excel'定义的名称
本文关键字:定义 Excel 修改 | 更新日期: 2023-09-27 17:49:23
我必须使用OpenXml重命名Excel表,但当这是完成这些表的引用将不再工作。我一直试图改变DefinedName
的innerXml
使用OpenXml,但它不会设置值。以下是目前为止的内容:
private void Renamesheet(string sheetName, string newSheetName, string filePath)
{
using (SpreadsheetDocument document = SpreadsheetDocument.Open(filePath, true))
{
WorkbookPart wbPart = document.WorkbookPart;
Sheet sheet = wbPart.Workbook.Descendants<Sheet>().Where(s => s.Name == sheetName).FirstOrDefault();
sheet.Name = newSheetName;
var names = wbPart.Workbook.DefinedNames.Where(x => x.InnerText.ToString().Contains("'" + sheetName + "'"));
var i = 0;
while (i < names.Count())
{
names.ElementAt(i).InnerXml = names.ElementAt(i).InnerXml.Replace(sheetName, newSheetName);
i++;
}
wbPart.Workbook.Save();
}
}
我使用while循环而不是foreach,因为我读到这可能会解决这个问题,但它没有。
WorkbookPart w= document.WorkbookPart;
Sheet sheet = w.Workbook.Descendants<Sheet>().Where(s => s.Name == "abc").FirstOrDefault();
sheet.Name = "dreamers"; (1)
w.Workbook.Save();
上面的三行更改了表名,只要第(1)行执行var names = wbPart.Workbook.DefinedNames。其中(x => x. innertext . tostring()。Contains("'"+ sheetName +"'"));
行将抛出空引用异常,因为名称将被更改。
在任何情况下,excel没有相同的DefinedNames为两个表,所以哪里将返回一个表,因此while循环不需要。用户FirstOrDefault()代替while.