最近要给项目写一些小工具,来方便数据初始化,不过囧的时操作Office 2010 时遇到了小麻烦,怎么连接Excel时都是报错 “未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序”。
系统为Server 2008 R2 ,查了各种资料,都不能完全解决问题,其实主要问题在于使用的连接字符串有问题。
很久以前一直使用的如下:
View Code
1 private const string CONST_CONNECTIONSTRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\MyExcel.xls;Extended Properties=Excel 8.0;";
现在使用2010时,需要使用如下连接字符串:
View Code
1 private const string CONST_CONNECTIONSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=C:\\MyExcel.xls;Extended Properties=Excel 12.0;";
此问题就这样的解决了。。。
以下为读取Excel的小部分源码:
View Code
1 /// <summary>
2 /// 取得Excel中的数据
3 /// </summary>
4 /// <param name="excelPath">excel路径</param>
5 /// <param name="sheetName">工作表名称</param>
6 /// <param name="queryStr">查询语句</param>
7 /// <returns>DataTable</returns>
8 internal DataTable GetExcelDate(string excelPath, string sheetName, string queryStr)
9 {
10 string connStr = string.Empty;
11 DataTable table = new DataTable();
12 OleDbDataReader reader = null;
13
14 if (string.IsNullOrEmpty(sheetName))
15 {
16 sheetName = GetFirstSheet(excelPath);
17 }
18
19 if (string.IsNullOrEmpty(excelPath))
20 {
21 return null;
22 }
23
24 connStr = string.Format(CONST_CONNECTIONSTRING, excelPath);
25
26 if (string.IsNullOrEmpty(queryStr))
27 {
28 queryStr = string.Format("Select * from [{0}]", sheetName);
29 }
30
31 GetExcelReader(connStr, queryStr, out reader);
32
33 // 填充数据表
34 AddExcelDataTable(table, reader);
35
36 // 回收使用过的资源
37 CloseConn();
38 CloseReader(reader);
39
40 return table;
41 }
2 /// 取得Excel中的数据
3 /// </summary>
4 /// <param name="excelPath">excel路径</param>
5 /// <param name="sheetName">工作表名称</param>
6 /// <param name="queryStr">查询语句</param>
7 /// <returns>DataTable</returns>
8 internal DataTable GetExcelDate(string excelPath, string sheetName, string queryStr)
9 {
10 string connStr = string.Empty;
11 DataTable table = new DataTable();
12 OleDbDataReader reader = null;
13
14 if (string.IsNullOrEmpty(sheetName))
15 {
16 sheetName = GetFirstSheet(excelPath);
17 }
18
19 if (string.IsNullOrEmpty(excelPath))
20 {
21 return null;
22 }
23
24 connStr = string.Format(CONST_CONNECTIONSTRING, excelPath);
25
26 if (string.IsNullOrEmpty(queryStr))
27 {
28 queryStr = string.Format("Select * from [{0}]", sheetName);
29 }
30
31 GetExcelReader(connStr, queryStr, out reader);
32
33 // 填充数据表
34 AddExcelDataTable(table, reader);
35
36 // 回收使用过的资源
37 CloseConn();
38 CloseReader(reader);
39
40 return table;
41 }
以上读取的方法使用的为ADO.NET,当然也可以使用OFFICE提供的API,那就看自己用哪种方法顺手了。