通过它的代号获取工作表

时间:2014-11-27 12:33:35

标签: excel closedxml

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

只要suer不会将SheetName“Sales”更改为其他内容,这就可以正常工作:

var myworksheet = Worksheet("Sales");

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

var myworksheet = WorksheetByCodeName("Sheet1");

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

enter image description here

More information about worksheet codenames

1 个答案:

答案 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;
}