You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中获取Excel工作表的Codename(代号)?

在C#中获取Excel工作表的Codename

问题描述

我正在使用一个Excel模板,其中工作表名称可能会更改,但Codename(代号)保持不变。请问是否可以在C#中获取Excel工作表的Codename?

我尝试使用shCodeName = SH_parent.CodeName;但无法正常工作,不过shName = SH_parent.Name;可以正常运行。

相关代码定义

  • SH_parent的定义:
Excel.Worksheet SH_parent;
  • 加载SH_parent的代码:
foreach (Excel.Name N in WB.Names)
{
    if (!N.Name.Contains("!"))
    {
        //GLOBAL
        string SH_Name = N.RefersTo.ToString().Split('!')[0].Replace("=", "").Replace("'", "");
        SH_parent= WB.Worksheets[SH_Name];
    }
    else
    {
        //SHEET
        SH_parent = N.Parent;
    }
}

解决方案

直接通过Excel.Worksheet对象的CodeName属性无法获取,是因为Office互操作库的Worksheet接口默认未暴露该属性。要获取Codename,可通过以下两种可行方法实现:

方法1:反射(后期绑定)

通过反射机制访问工作表对象的CodeName属性,示例代码:

using System.Reflection;

// 确保SH_parent已正确赋值
string codeName = SH_parent.GetType().InvokeMember("CodeName", 
    BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.Public, 
    null, SH_parent, null) as string;

方法2:扩展Worksheet接口

如果项目中需要频繁使用该功能,可以封装扩展方法简化调用:

public static class WorksheetExtensions
{
    public static string GetCodeName(this Excel.Worksheet worksheet)
    {
        return worksheet.GetType().InvokeMember("CodeName",
            BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.Public,
            null, worksheet, null) as string;
    }
}

// 调用方式
string shCodeName = SH_parent.GetCodeName();

备选方案:通过VBProject获取

Excel工作表的Codename存储在工作簿的VB项目中,也可通过访问Workbook.VBProject获取,但需注意两点:

  1. 开启Excel的宏权限(否则会抛出权限异常)
  2. 引用Microsoft.Vbe.Interop程序集

示例代码:

using Microsoft.Vbe.Interop;

foreach (VBComponent component in WB.VBProject.VBComponents)
{
    if (component.Type == vbext_ComponentType.vbext_ct_Sheet)
    {
        if (component.Properties("Name").Value.ToString() == SH_parent.Name)
        {
            string codeName = component.Name;
            break;
        }
    }
}

内容的提问来源于stack exchange,提问作者Dumitru Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:48:22