通过它的代号来获取工作表

每个Excel工作表都有一个SheetName(名称显示给用户)和一个Codename(内部不可变的名称,用户不可见),见下图。 我需要通过它的代号而不是它的SheetName来获得工作表。 原因是如果用户更改SheetName,我的实际代码将不再工作。

只要suer不会将SheetName“Sales”更改为其他值:

var myworksheet = Worksheet("Sales"); 

我需要假设函数WorksheetByCodeName所以我可以写这个(如果用户已经将SheetName从“Sales”更改为其他内容,也可以这样做:

 var myworksheet = WorksheetByCodeName("Sheet1"); 

此图片仅用于说明。 这个问题与VBA无关。

在这里输入图像说明

有关工作表代号的更多信息

你不能在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; }