我应该通过OleDb Jet4.0读取一个excel文件并保存到数据集中吗?

时间:2011-08-22 04:08:39

标签: c# excel oledb

我必须阅读一个excel文件并放入数据集。

我应该通过OleDbDataAdapter读取excel文件内容,然后填入数据集吗? 我尝试过但是很失败。它表示当数据适配器正在执行Fill方法时,应用程序无法识别数据库格式。

代码:

String queryAll = "SELECT * FROM [Sheet1$]";
String xlsPath = Directory.GetCurrentDirectory() + "\\paid.xls";
String strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + xlsPath;
try
{
    m_dbDA = new OleDbDataAdapter(queryAll, strConn);
    DataSet dsPaidXls = new DataSet();
    m_dbDA.Fill(dsPaidXls);  //exception here
 }
 catch (System.Exception ex)
 {
    MessageBox.Show(ex.Message);
 }

这是否意味着无法直接读取Excel数据并放入新数据集? 并且唯一的方法是逐个单元地读取excel数据并插入具有数据表的新DataSet?

提前致谢。

========================================
解决
========================================

String queryAll = "SELECT * FROM [Sheet1$]";
String xlsPath = Directory.GetCurrentDirectory() + "\\paid.xls";
String strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + xlsPath +
                 ";Extended Properties='Excel 8.0;IMEX=1';";
try
{
   m_dbDA = new OleDbDataAdapter(queryAll, strConn);
   DataSet dsPaidXls = new DataSet();
   m_dbDA.Fill(dsPaidXls,"[Sheet1$]");
   dataGridView1.DataSource = dsPaidXls;
   dataGridView1.DataMember = "[Sheet1$]";
 }
 catch (System.Exception ex)
 {
     MessageBox.Show(ex.Message);
 }

3 个答案:

答案 0 :(得分:2)

如果您拥有正确的连接字符串并且了解数据类型的问题,OLEDB可以很好地工作。 Jet适用于2007之前的版本,您需要为Excel添加扩展属性。

String strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" 
  + xlsPath + "Extended Properties='Excel 12.0 Xml;HDR=YES';";

请参阅: Connection Strings
How To Use ADO with Excel Data from Visual Basic or VBA(包含有用的注释)
Various notes

答案 1 :(得分:2)

当您通过OleDB读取Excel文件时,请确保您拥有正确版本的提供程序(一个用于xls,一个用于xlsx),并确保选择x86作为平台。

如果不这样做,它将在64位系统上编译为x64,并且由于不推荐使用OleDb,因此没有64位OleDb驱动程序,这意味着您的程序将在调用OleDb时崩溃。

此外,必须安装Office 2007系统驱动程序(ACE Data Connectivity Components)。

见这里:
Diagnosing an OLEDB exception when Quering Excel 2010

您也可以使用ODBC或Excel Package Plus 同样,如果格式为xls而不是xlsx,则需要在此处使用不同的库。

XLS的ExcelLibrary
http://code.google.com/p/excellibrary/

适用于XLSX的Excel Package Plus
http://epplus.codeplex.com/

答案 2 :(得分:0)

您应该避免使用OleDb来读取Excel文件。许多pitfals。

对于xls文件,这样做效果更好,更可靠。

http://www.codeproject.com/KB/office/ExcelReader.aspx

对于xlsx文件,请使用Office Open XML SDK:

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=5124