使用GetVstoObject和HasVstoObject

时间:2013-09-10 16:04:47

标签: c# excel excellibrary

我有一个使用Interop库创建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时起作用了 感谢

1 个答案:

答案 0 :(得分:0)

如果您从未调用HasVstoObject来“缓存”扩展的VSTO-Object,我认为GetVstoObject将始终返回false。因此,解决方案是调用GetVstoObject而不使用封闭的if,一切都会正常工作。之后,方法HasVstoObject也会返回true

此致 约尔格

P.S。:我也不太了解HasVstoObject方法的深层意义......