使用c#将数据更新到Excel工作表

时间:2014-01-13 09:29:01

标签: c# excel oledb

我正在尝试使用OLEDB连接更新格式为“xlsx”的Excel工作表中的某些数据,但我无法确定连接建立。

这是我的代码:

        String sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source='" + "D:\abc1.xlsx" + "';Extended Properties='Excel 8.0;HDR=Yes'";
        OleDbConnection con = new OleDbConnection(sConnectionString);

        con.Open();
        OleDbCommand com = new OleDbCommand("select * from Sheet1",con);
        OleDbDataReader reader = null;

        reader = com.ExecuteReader();
        while (reader.Read())
        {
            Console.WriteLine(reader[0]);
        }
        con.Open();

        Console.ReadLine();
    }

当我运行代码时,我遇到以下异常:

  

“Microsoft.ACE.OLEDB.12.0”提供程序未在本地注册   机。

任何想法如何从此异常或任何其他建议中恢复,我可以在excel中更新我的数据。

4 个答案:

答案 0 :(得分:0)

PlatformTarget类型从AnyCPU更改为X86

步骤:

转到项目属性。
选择Build标签 从PlatformTarget选项中选择X86

答案 1 :(得分:0)

这可能是您所声明的提供商尝试将其更改为与您机器上的Excel版本匹配的提供商

尝试

Provider=Microsoft.ACE.OLEDB.12.0;Data Source='D:\abc1.xlsx';Extended Properties="Excel 12.0 Xml;HDR=YES";

相反

也可能是excel未安装

同时检查您是否引用了项目的OLEDB库

答案 2 :(得分:0)

此异常可能有多种原因。

1)您可以使用OleDbEnumerator类来查找可用的提供程序。 因此,您设置了连接字符串。

2)在此之前,请尝试下面的连接字符串。 String sConnectionString =“Provider = Microsoft.Jet.OLEDB.4.0; Data Source ='”+“D:\ abc1.xlsx”+“'; Extended Properties ='Excel 8.0; HDR = Yes'”;

3)如果您有64位操作系统,则没有可用的64位版本的JET提供程序,并且没有其他选择。只要您想支持JET,就需要将构建目标设置为x86。

答案 3 :(得分:-2)

首先将Excel工作簿保存为Excel 97-2003工作簿 它将在我的项目中起作用......

string filepath = Server.MapPath("~/ImportData/") + fileUpload.FileName;
 OleDbConnection oconn = new OleDbConnection
 (@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";  
        Extended Properties=Excel 8.0");`


    oconn.Open();
    OleDbDataAdapter adp = new OleDbDataAdapter("select * from Sheet1", oconn);
    DataSet ds = new DataSet();

    adp.Fill(ds);
    oconn.Close();`