Мне нужно переименовать листы Excel с помощью OpenXml, но когда это будет сделано, ссылки на эти листы больше не будут работать. Я пытался изменить innerXml
DefinedName
с использованием OpenXml, но он не установит значение. Вот что я до сих пор:Изменить определенное имя Excel
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();
}
}
Я использую время цикла вместо Еогеасп, потому что я прочитал, что может решить эту проблему, но это не так. Любая помощь будет большой.
Я не вижу, чтобы вы сохранили изменения до выхода из инструкции 'using'. Я не уверен, что оператор using автоматически сохранит ваши изменения на диске при удалении. Попробуйте сохранить его явно. –
К сожалению, я не добавлял это в фрагмент. Это, однако, в моем коде. Сейчас я отредактирую его. – mattfetz
Каковы имена листов? Вы ищете их с одинарными кавычками вокруг них. Если в названии нет пробелов, то возможно, что они находятся в формулах без кавычек. Я думаю, что ваш поиск будет работать и без одинарных кавычек, если вы хотите дать этот прогон. –