工作表的控制方法不可用

问题描述 投票:0回答:3

我在对 Excel 插件进行编程时遇到了一个奇怪的问题; 我想在 Excel 中添加控件,我使用了这段鼓舞人心的代码https://msdn.microsoft.com/en-us/library/cc442817.aspx

private void button_Click(object sender, RibbonControlEventArgs e)
{
    var worksheet = (Worksheet)Globals.ThisAddIn.Application.ActiveSheet;
    {
        const string buttonName = "MyButton";

        if (((RibbonCheckBox)sender).Checked)
        {
            var selection = Globals.ThisAddIn.Application.Selection as Range;
            if (selection != null)
            {
                var button =
                    new Microsoft.Office.Tools.Excel.Controls.Button();
                worksheet.Controls.AddControl(button, selection, buttonName);
            }
        }
        else
        {
            worksheet.Controls.Remove(buttonName);
        }
    }
}

但是工作表的控制方法不可用,我无法访问它,我添加了 Microsoft.Office.Tools.Excel.v4.0.Utilities.dll 程序集和以下语句

using Microsoft.Office.Interop.Excel; 
using Microsoft.Office.Tools.Ribbon;
using Office = Microsoft.Office.Core;

顺便说一下,我使用的是 Office 2007 和 vs 2013,所以我在 DebugInfoExeName 中将 Office 版本更改为 12。

c# excel vsto add-in windows-controls
3个回答
1
投票

使用正确的命名空间解决了我的类似问题:

using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Tools.Excel;

0
投票

您需要使用 GetVstoObject 方法获取代表工作簿中工作表的宿主项,然后将 Button 控件添加到当前选定的单元格。

private void Button_Click(object sender, RibbonControlEventArgs e)
{
    Worksheet worksheet = Globals.Factory.GetVstoObject(
       Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);
    string buttonName = "MyButton";

    if (((RibbonCheckBox)sender).Checked)
    {
        Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range;
        if (selection != null)
        {
            Microsoft.Office.Tools.Excel.Controls.Button button =
               new Microsoft.Office.Tools.Excel.Controls.Button();
            worksheet.Controls.AddControl(button, selection, buttonName);
        }
    }
    else
    {
        worksheet.Controls.Remove(buttonName);
    }
}

0
投票

我遇到了同样的问题,尽管使用了正确的命名空间,但 .Controls 没有公开。

解决方案位于 ControlExtensions 类文档中: 注意:在面向 .NET Framework 4 的 Excel 加载项项目中,必须添加对 Microsoft.Office.Tools.Excel.v4.0.Utilities.dll 程序集的引用,然后才能访问 ControlExtensions 方法。

© www.soinside.com 2019 - 2024. All rights reserved.