【问题标题】:Obtaining a Worksheet by it's codename通过其代号获取工作表
【发布时间】:2023-03-15 06:30:01
【问题描述】:

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

只要用户不将 SheetName “Sales” 更改为其他内容,此方法就有效:

var myworksheet = Worksheet("Sales");

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

var myworksheet = WorksheetByCodeName("Sheet1");

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

More information about worksheet codenames

【问题讨论】:

    标签: excel closedxml


    【解决方案1】:

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

    【讨论】:

    • 这应该可以通过 ClosedXML 实现。我将在closedxml.codeplex.com 上提出请求。还是非常感谢。
    • 很抱歉我接受了这个答案,但这总是返回字符串“sheetpr”而不是实际的工作表名称。
    猜你喜欢
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 2018-09-08
    • 2020-12-22
    相关资源
    最近更新 更多