1

我有一个现有的项目,它使用创建一个 excel 电子表格,Microsoft.Office.Interop.Excel.WorkbookClass并且我正在尝试将工作簿对象转换为Microsoft.Office.Tools.Excel.Workbook,但是我收到一个异常,说明:

“无法将‘Microsoft.Office.Interop.Excel.WorkbookClass’类型的 COM 对象转换为类类型‘Microsoft.Office.Tools.Excel.Workbook’。表示 COM 组件的类型的实例不能转换为不表示的类型COM 组件;但是,只要底层 COM 组件支持对接口的 IID 的 QueryInterface 调用,它们就可以转换为接口。”

Microsoft.Office.Interop.Excel.Application xlApp = null;
Microsoft.Office.Tools.Excel.Workbook xlWorkbook = null;
Microsoft.Office.Interop.Excel.Sheets xlSheets = null;
Microsoft.Office.Tools.Excel.Worksheet xlNewSheet = null;

xlApp = new Interop.Application();
xlApp.Visible = true;
xlWorkbook = (Microsoft.Office.Tools.Excel.Workbook)xlApp.Workbooks.Add(Interop.XlWBATemplate.xlWBATWorksheet);
xlSheets = xlWorkbook.Sheets as Interop.Sheets;
xlNewSheet = (Microsoft.Office.Tools.Excel.Worksheet)xlSheets.Add(xlSheets[1], Type.Missing, Type.Missing, Type.Missing);
xlNewSheet.Name = "SheetName1";

如果没有,这可能吗,我可以采取哪些其他选项,因为已经使用互操作类创建了 excel 工作表,并且

4

2 回答 2

1

如果可能,请尽量避免使用 Visual Studio Tools For Office 内部的 Microsoft.Office.Tools 程序集。

我已将您的代码修改如下:

    Microsoft.Office.Interop.Excel.Application xlApp = null;
    Microsoft.Office.Interop.Excel.Workbook xlWorkbook = null;
    Microsoft.Office.Interop.Excel.Sheets xlSheets = null;
    Microsoft.Office.Interop.Excel.Worksheet xlNewSheet = null;

    xlApp = new Microsoft.Office.Interop.Excel.Application();
    xlApp.Visible = true;
    xlWorkbook = xlApp.Workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
    xlSheets = xlWorkbook.Sheets as Microsoft.Office.Interop.Excel.Sheets;
    xlNewSheet = xlSheets.Add(xlSheets[1], System.Type.Missing, System.Type.Missing, System.Type.Missing);
    xlNewSheet.Name = "SheetName1";
于 2013-09-10T07:42:55.030 回答
0

看起来像将互操作工作簿“转换”为 vsto 工作簿,您只需执行以下操作:

在应用程序级项目中,您可以使用 GetVstoObject 方法以编程方式创建 Microsoft.Office.Tools.Excel.Workbook 对象。

Microsoft.Office.Interop.Excel.Workbook nativeWorkbook = Globals.ThisAddIn.Application.ActiveWorkbook;
if (nativeWorkbook != null)
{
    Microsoft.Office.Tools.Excel.Workbook vstoWorkbook = 
        Globals.Factory.GetVstoObject(nativeWorkbook);
}
于 2013-09-09T20:58:37.123 回答