在winform中导入excel表

时间:2010-07-12 18:04:14

标签: c#

我使用oledb连接字符串导入excel表。我正在引用12.0对象库。 我尝试使用excel 2003和2007,但是得到了同样的例外情况

由于以下错误,从IClassFactory创建具有CLSID {00020820-0000-0000-C000-000000000046}的COM组件实例失败:80010001。

我的代码是

        txtpath.Text = fdlg.FileName;

        Excel.Worksheet worksheet = new Excel.Worksheet();
        Excel.Sheets sheets;
        Excel.Workbook theWorkbook;
        string SheetName;

        OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"" + txtpath.Text + "\";Extended Properties=\"Excel 12.0 Xml;HDR=Yes;\";");
        conn.Open();

        Excel.Application ExcelObj = null;
        ExcelObj = new Excel.Application();

        theWorkbook = ExcelObj.Workbooks.Open(txtpath.Text, 0, false, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", true, true, 0, true, 1, 0);

        sheets = theWorkbook.Worksheets;

        worksheet = (Excel.Worksheet)theWorkbook.Worksheets.get_Item(1);
        SheetName = worksheet.Name.Trim();

        OleDbDataAdapter da = new OleDbDataAdapter("Select * FROM [" + SheetName + "$]", conn);
        DataSet ds = new DataSet();
        da.Fill(ds);

请帮忙。

2 个答案:

答案 0 :(得分:1)

这是一个非常低级别的COM错误,RPC_E_CALL_REJECTED,“呼叫被被叫方拒绝”。这没有多大帮助,但显然Excel对您的代码不满意。这个陈述是一个非常好的候选人:

 Excel.Worksheet worksheet = new Excel.Worksheet();

失去了,它没有做任何有用的事情。首先创建Application对象始终是必需的。

答案 1 :(得分:0)

免责声明:我没有做很多Office互操作。但是我在这个错误上的Google搜索意味着当有问题的COM对象没有完全加载时会发生这种情况,并且我注意到你在创建Excel.Application之前打开连接宾语。

也许你可以改变它?尝试这样的事情:

        Excel.Worksheet worksheet = new Excel.Worksheet();
        Excel.Sheets sheets;
        Excel.Workbook theWorkbook;
        string SheetName;

        Excel.Application ExcelObj = null;
        ExcelObj = new Excel.Application();

        theWorkbook = ExcelObj.Workbooks.Open(txtpath.Text, 0, false, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", true, true, 0, true, 1, 0);

        sheets = theWorkbook.Worksheets;

        worksheet = (Excel.Worksheet)theWorkbook.Worksheets.get_Item(1);
        SheetName = worksheet.Name.Trim();


        OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"" + txtpath.Text + "\";Extended Properties=\"Excel 12.0 Xml;HDR=Yes;\";");
        conn.Open();
        OleDbDataAdapter da = new OleDbDataAdapter("Select * FROM [" + SheetName + "$]", conn);
        DataSet ds = new DataSet();
        da.Fill(ds);