我该如何处理“;没有定义构造函数“;以及“;类型不能被嵌入”;例外情况

本文关键字:不能 类型 以及 情况 构造函数 何处理 处理 定义 | 更新日期: 2023-09-27 18:19:33

添加Excel 12引用(其中添加了Microsoft.Office.Interop.Excel和VBIDE DLL)后,我从这里复制并粘贴了代码,即:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
namespace WindowsFormsAppExcelTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void buttonCreateExcelFile_Click(object sender, EventArgs e)
        {
            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            object misValue = System.Reflection.Missing.Value;
            xlApp = new Excel.ApplicationClass();
            xlWorkBook = xlApp.Workbooks.Add(misValue);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
            xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com";
            xlWorkBook.SaveAs("csharp-Excel.xls",
            Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue,
            Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            xlWorkBook.Close(true, misValue, misValue);
            xlApp.Quit(); releaseObject(xlWorkSheet);
            releaseObject(xlWorkBook);
            releaseObject(xlApp);
            MessageBox.Show("Excel file created , you can find the file c:''csharp-Excel.xls"); 
        }
        private void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        } 
    } // class
} // namespace

然而,它未能构建两个错误消息:

类型"Microsoft.Office.Interop.Excel.ApplicationClass"没有定义构造函数

-和:

无法嵌入互操作类型"Microsoft.Office.Interop.Excel.ApplicationClass"。请改用适用的界面

两者都指出这条线是罪魁祸首:

xlApp = new Excel.ApplicationClass();

如果我从该行中删除"new",第一个错误消息将变为:

"Microsoft.Office.Interop.Excel.ApplicationClass"是一种"类型",在给定上下文中无效

所以这是一个"Catch 2"的情况——无论我做什么,它都会捕捉到两个错误。

我该怎么办?

我该如何处理“;没有定义构造函数“;以及“;类型不能被嵌入”;例外情况

将代码更改为:

private void buttonCreateExcelFile_Click(object sender, EventArgs e)
{
    Excel.Application xlApp;
    Excel.Workbook xlWorkBook;
    Excel.Worksheet xlWorkSheet;
    object misValue = System.Reflection.Missing.Value;
    xlApp = new Excel.Application();
    . . .

工作(使用Excel.Application而不是Excel.ApplicationClass)。