使用OleDb,将Excel导入DataSet

介绍一种将Excel文件所有Sheet数据填充入DataSet的方法,该方法简单快捷,但不适用于格式复杂的Excel文件。还提到代码中一处字符错误,以及Excel查询可加范围指定获取数据,并给出使用示例代码。

本方法,将传入的Excel文件内所有的Sheet内的数据都填充入DataSet中。这是一个简单快捷的方法,不足之处是不适合带有格式复杂的Excel文件。(比如:有合并单元格的)

public class ExcelUtil { /// <summary> /// 从Excel文件导入DataSet /// Excel的连接字符串说明(详细参看 http://www.connectionstrings.com/excel ): /// HDR=Yes 表示第一行是表头,没有数据,读取时忽略第一行。设置为 No 时则从第一行读取。 /// IMEX=1 表示告诉OleDb驱动,所有数据将作为字符串读取(numbers,dates等) /// 注意:有时候因为ISAM驱动没有安装,设置HDR和IMEX会出异常。去掉即可。 /// </summary> /// <param name="fileName">Excel文件路径</param> /// <param name="firstRowIsHeader">第一行是否是表头</param> /// <returns>Excel数据,一个Sheet对应一个DataTable</returns> public static DataSet GetDataSetFromExcel(string fileName, string sheetName = "", bool firstRowIsHeader = true) { if (!System.IO.File.Exists(fileName)) throw new ArgumentException("file is not exist!"); var ds = new DataSet(); var strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='{0}';Extended Properties=Excel 8.0;"; //if (firstRowIsHeader) // strConn += "HDR=Yes;"; strConn = string.Format(strConn, fileName); using (var conn = new OleDbConnection(strConn)) { conn.Open(); DataTable excelSchema = null; string sql = "select * from [{0}]"; var adapter = new OleDbDataAdapter(); adapter.SelectCommand = conn.CreateCommand(); if (string.IsNullOrEmpty(sheetName)) { excelSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); foreach (DataRow row in excelSchema.Rows) { var sheet = row["TABLE_NAME"].ToString(); sql = string.Format(sql, sheet); adapter.SelectCommand.CommandText = sql; adapter.Fill(ds, sheet); } } else { sql = string.Format(sql, sheetName + "{1}quot;); adapter.SelectCommand.CommandText = sql; adapter.Fill(ds, sheetName); } conn.Close(); } return ds; } }

上面代码中46行的 "quot;" 应为 "$"


Excel查询的时候,加上范围也可以。这样就能指定范围获得数据。比如:
(1) string sql = "select * from [{0}A:C]";
(2) string sql = "select * from [{0}A1:C100]";

使用:

private void btnExcel2Data_Click(object sender, EventArgs e) { openFileDialog1.Filter = "Excel Files | *.xls"; var ret = openFileDialog1.ShowDialog(); if (ret == System.Windows.Forms.DialogResult.OK) { DataSet ds = GetDataSetFromExcel(openFileDialog1.FileName, false); this.dataGridView1.DataSource = ds.Tables[0]; } }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值