C#连接Excel的方法与连接Access的方法类似,同样可以使用OldDBConnection,如下:
- String excelPath = "你的Excel文件绝对路径";
- ConnectionString = @"Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + excelPath + ";" + "Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";
其中的参数:
- Provider就跟Access 的一样了,置顶数据源类型
- Data Srource,直数据源绝对路径
- Extended Properties 里面几个参数为Excel的拓展参数。其中:
- Excel 8.0 针对EXCEL 2000 或更高版本;Excel 5.0 FOR EXCEL 97
- HDR 表示第一行是否为字段名。Yes为首行字段,No为无首行
- IMEX 表示对同一列中有混合数据类型的列,是统一按字符型处理,还是将个别不同类型的值读为DBNULL。1为混合,2为不混合
数据库连接好后就是查询,查询的方法跟Asscess一样只是Excel的表面后面都需要加上一个’$'字符.比如:
- DataTable tempDataTable = new DataTable();
- String strSql = "SELECT * FROM [sheet1$]";
- DataAdapter da = new OleDbDataAdapter(strSql, myConnection);
- da.Fill(tempDataTable);
到这里,就完成了C#连接Excel和查询Excel数据表。
private void GetExcelSheet()
{
String excelPath = @"D:\test\test.xls";
string connectionString = @"Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + excelPath + ";" +
"Extended Properties='Excel 8.0;HDR=YES;IMEX=1';";
OleDbConnection oleDb = new OleDbConnection(connectionString);
oleDb.Open();
string ss = "select * from [Sheet1$] ";
OleDbCommand oleDbCommand = new OleDbCommand(ss, oleDb);
OleDbDataReader oleDbDataReader = oleDbCommand.ExecuteReader();
DataTable dataTable = new DataTable();
for(int i=0;i<oleDbDataReader.FieldCount;i++)
{
dataTable.Columns.Add(oleDbDataReader.GetName(i), oleDbDataReader.GetFieldType(i));
}
DataRow dataRow;
while(oleDbDataReader.Read())
{
dataRow = dataTable.NewRow();
for(int i=0;i<dataTable.Columns.Count;i++)
{
dataRow[i] = oleDbDataReader.GetValue(i);
}
dataTable.Rows.Add(dataRow);
}
this.dataGridView1.DataSource = dataTable;
}
}
1.不能连接数据库
(1)注意连接语句的版本是否正确
(2)检查路径是否正确
(3)路径时检查文件夹是否有写入权限
2.操作必须使用一个可更新的查询
注意连接的参数,这里 我用IMEX=0时才能写入成功
A: HDR ( HeaDer Row )设置
若指定值为Yes,代表 Excel 档中的工作表第一行是栏位名称
若指定值為 No,代表 Excel 档中的工作表第一行就是資料了,沒有栏位名称
B:IMEX ( IMport EXport mode )设置
IMEX 有三种模式,各自引起的读写行为也不同,容後再述:
0 is Export mode
1 is Import mode
2 is Linked mode (full update capabilities)
我这里特别要说明的就是 IMEX 参数了,因为不同的模式代表著不同的读写行为:
当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。
当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。
当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。