Using GetVstoObject and HasVstoObject
本文关键字:HasVstoObject and GetVstoObject Using | 更新日期: 2023-09-27 18:30:46
我有一个控制台应用程序,它使用互操作库创建一个 excel 工作表,然后尝试使用 GetVstoObject 获取 vstoObject 以使用 Microsoft.Office.Tools.Excel 库。当运行下面的代码时,HasVstoObject 总是返回 false,不确定它在执行时是否尚未创建,因为它是从简单的控制台应用程序主程序运行的。从扩展的文档来看,这似乎是可以做到的
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 时,它可以正常工作谢谢
我认为如果您从未调用GetVstoObject
来"缓存"扩展的VSTO对象,HasVstoObject
将始终返回false。因此,解决方案是在没有封闭if
的情况下调用GetVstoObject
,一切都会正常工作。之后,方法HasVstoObject
也将返回true
。
问候约尔格
PS:我也不是真的理解HasVstoObject
方法的深层含义......