每个Excel工作表都有一个SheetName(显示给用户的名称)和一个Codename(用户看不到的内部不可变名称),见下图。我需要通过它的代号而不是它的SheetName来获取工作表。原因是如果用户更改SheetName,我的实际代码将不再起作用。
只要suer不会将SheetName“Sales”更改为其他内容,这就可以正常工作:
var myworksheet = Worksheet("Sales");
我需要假设函数WorksheetByCodeName
所以我可以写这个(如果用户将SheetName从“Sales”更改为其他内容,也可以这样做:
var myworksheet = WorksheetByCodeName("Sheet1");
此图片仅供说明。这个问题与VBA无关。
答案 0 :(得分:2)
您无法在ClosedXML中执行此操作。但是你可以使用OpenXML(你已经有了ClosedXML的要求):
static string GetWorksheetNameForCodeName(string filename, string codename)
{
DocumentFormat.OpenXml.Packaging.WorksheetPart wsp = SpreadsheetDocument
.Open(filename, false).WorkbookPart.WorksheetParts
.SingleOrDefault(ws => ws.Worksheet.SheetProperties.CodeName == codename);
return wsp == null ? string.Empty : wsp.Worksheet.SheetProperties.LocalName;
}