如何使用VSTO 2010 for Excel按名称显示工作表

6
我从未使用过VSTO,发现很难找到一个好的2010年学习辅助工具。
我的需求很简单,我有一个包含42个工作表的业务工作簿(我最初猜测是20个,但数了一下发现数量惊人)。我想使用VSTO添加一个功能区(这部分很容易),以便让员工轻松浏览大量页面。我似乎找不到C#代码来显示特定的工作表(最好是按名称),以便我可以将其简单地添加到按钮的单击事件中。
谢谢
1个回答

11

在工作表对象(类型为 Microsoft.Office.Tools.Excel.Worksheet)上调用 Activate 方法。

您可以通过以下方式从 ThisWorkbook 类中的名称或通过 Globals.ThisWorkbook 实现:

private Excel.Worksheet GetWorksheetByName(string name)
{
  foreach (Excel.Worksheet worksheet in this.Worksheets)
  {
    if (worksheet.Name == name)
    {
      return worksheet;
    }
  }
  throw new ArgumentException();
}

private void ActivateWorksheetByName(string name)
{
  GetWorksheetByName(name).Activate();
}

调用 ActivateWorksheetByName 并传递要显示的工作表的名称。


我该如何从Ribbon类中访问ThisWorkBook实例?我似乎无法获取它的钩子,而且我显然不想再创建一个新的实例。 - Mike B
2
您可以通过 Globals 类访问它,如 Globals.ThisWorkbook - Richard Cook
1
谢谢,这个方法很有效。奇怪的是,我得到了一个编译器警告,.Activate() 方法和事件之间存在歧义(它使用的是方法,所以它可以正常工作),但它不接受完整的命名空间。感谢您的时间,这解决了我的直接问题,并为我提供了有关VSTO的简要介绍。相信我,当这本书可用时,我会购买它的。我不会等待电影版。 - Mike B
1
我读过的所有关于VSTO 3.0的内容都很好。VSTO 4(VS 2010)在模型方面几乎没有变化,只是增加了一些新功能,使得调试和部署更加容易。VSTO 2.0 (VS 2005)有相当多的破坏性变化。坚持阅读VSTO 3.0/4.0的文章,你就会没问题。 - Anonymous Type
1
我知道现在有点晚了,但是为了消除模糊的警告,你需要将其转换为_Worksheet。例如:((Excel._Worksheet)sheet).Activate(); - Jake1164
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接