我必须阅读一个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);
}
答案 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