0

我有一个控制台应用程序,它使用互操作库创建一个 excel 工作表,然后尝试使用 GetVstoObject 获取 vstoObject 以使用 Microsoft.Office.Tools.Excel 库。运行 HasVstoObject 下面的代码时,总是返回 false,不确定执行时它是否尚未创建,因为这是从简单的控制台应用程序主程序运行的。从 Extensions 的文档来看,这似乎是合理的

    Microsoft.Office.Interop.Excel.Application excelApp = null;
    Microsoft.Office.Interop.Excel.Workbook workbook = null;
    Microsoft.Office.Interop.Excel.Sheets sheets = null;
    Microsoft.Office.Interop.Excel.Worksheet newSheet = null;
    Microsoft.Office.Tools.Excel.Worksheet XLsWorkSheet = null;

    excelApp = new Interop.Application();
    excelApp.Visible = true;
    workbook = excelApp.Workbooks.Add(Type.Missing);
    sheets = workbook.Sheets;

    newSheet = (Interop.Worksheet)sheets.Add(sheets[1], Type.Missing, Type.Missing, Type.Missing);
    newSheet.Name = "My New Sheet";
    newSheet.Cells[1, 1] = "BOO!";

    if (Excel.Extensions.WorksheetExtensions.HasVstoObject(newSheet)) {
       XLsWorkSheet = Excel.Extensions.WorksheetExtensions.GetVstoObject(newSheet);
       Microsoft.Office.Tools.Excel.Controls.ComboBox combobox1 = XLsWorkSheet.Controls.AddComboBox(XLsWorkSheet.Range["A1", "A1"], "combobox1");
       combobox1.Items.Add("1 Item");
        }

我还创建了一个 Excel 2007 插件来尝试这个,它在使用 Globals.Factory.GetvstoObject 时不起作用谢谢

4

1 回答 1

0

我认为HasVstoObject如果您从未调用GetVstoObject过“缓存”扩展的 VSTO 对象,那将始终返回 false。所以解决方案是在GetVstoObject没有封闭的情况下调用if,一切都会正常工作。之后,该方法HasVstoObject也将返回true

问候,约尔格

PS:我也不是很了解HasVstoObject方法的更深层次的意义......

于 2013-10-24T15:36:52.310 回答