2

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

只要 suer 不会将 SheetName "Sales" 更改为其他内容,这将起作用:

var myworksheet = Worksheet("Sales");

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

var myworksheet = WorksheetByCodeName("Sheet1");

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

在此处输入图像描述

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

4

1 回答 1

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;
}
于 2014-11-27T14:42:08.507 回答