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

在C#开发的VTSO应用中如何获取当前Excel文件的文件名?

VSTO 实现获取当前Excel文件名的解决方案

首先你提到的VTSO应为笔误,实际是VSTO(Visual Studio Tools for Office),以下分不同场景提供可直接复用的实现逻辑:

场景1:获取当前激活状态的工作簿文件名

这是最常用的场景,可直接匹配用户当前正在编辑的文档:

  • 核心代码示例:
using Excel = Microsoft.Office.Interop.Excel;

// 代码需放在VSTO插件上下文内执行,比如ThisAddIn类内部
private string GetActiveWorkbookFileName()
{
    Excel.Workbook activeWorkbook = Globals.ThisAddIn.Application.ActiveWorkbook;
    if (activeWorkbook == null)
    {
        // 无打开的工作簿时返回空值,可根据业务需求调整返回逻辑
        return string.Empty;
    }
    // 仅获取带后缀的文件名
    string fileName = activeWorkbook.Name;
    // 若需要文件完整绝对路径,替换为以下代码
    // string fullPath = activeWorkbook.FullName;
    return fileName;
}
  • 注意事项:
    • 若当前打开的是未保存的新建工作簿,FullName属性返回值和Name一致,仅显示默认名称(如「工作簿1」)
    • 工作簿处于保护状态或被其他进程锁定时,访问属性可能抛出异常,建议添加try-catch包裹逻辑
    • 若你开发的是文档级VSTO项目,无需走Globals对象,直接在项目上下文调用ThisWorkbook.Name即可获取当前关联文档的文件名

场景2:遍历所有已打开的工作簿批量匹配模板

如果需要检测所有已打开的文档来匹配模板,可遍历Application.Workbooks集合:

private List<string> GetAllOpenedWorkbookNames()
{
    List<string> fileNames = new List<string>();
    foreach (Excel.Workbook workbook in Globals.ThisAddIn.Application.Workbooks)
    {
        fileNames.Add(workbook.Name);
        // 此处可插入你的模板匹配逻辑,例如比对文件名特征、文档属性等
    }
    return fileNames;
}

模板匹配优化建议

单纯依赖文件名匹配模板的容错率较低,建议预先在模板文件中写入自定义文档属性作为唯一标识,通过读取属性匹配模板的准确率更高:

// 读取工作簿自定义属性示例
object customProperties = activeWorkbook.CustomDocumentProperties;
Type propType = customProperties.GetType();
// 读取你预先写入模板的唯一标识属性,避免文件名修改后匹配失效

内容的提问来源于stack exchange,提问作者Julius Alexander

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:36:04