这两天项目需求要检索excel的内容,于是就研究了一下,话不多说,我就直接贴代码1.首先是连接excel。
public DataTable SearchSheetToDT(string strSearch, string sheetName) { //文件路径 string path = Server.MapPath("~/Content/custom/Excel1.xlsx"); //连接表字符串 string ExcelConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + @path + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=2;ImportMixedTypes=Text'"; using (OleDbConnection ole_conn = new OleDbConnection(ExcelConnection)) { ole_conn.Open(); using (OleDbCommand ole_cmd = ole_conn.CreateCommand()) { ole_cmd.CommandText = strSearch; OleDbDataAdapter adapter = new OleDbDataAdapter(ole_cmd); DataSet ds = new DataSet(); adapter.Fill(ds, sheetName);//sheetName就是excel里的sheet表名 DataTable dt = new DataTable(); dt = ds.Tables[0]; return dt; } } }
简单解释一下连接 字符 串 HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES IMEX 参数因为不同的模式代表著不同的读写行为: 当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。 当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。 当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。
详情连接字符根据版本怎么写可以参照网站 : http://www.connectionstrings.com/excel/
之后就没问题,连接上了。就看操作语句
public bool SearchIndexSheet(string k) { string strIndex = "select * from [sheet1$]";//这里sheet1就是你的表名是什么就写什么,例如学生表就是 学生表$ string sheetName = "[sheet1$]"; DataTable indexdt = new DataTable(); //读取excel indexdt = SearchSheetToDT(strIndex, sheetName); //indexdt.DefaultView.RowFilter = "列名1='上证A股指数'"; //查询条件 var reslut = indexdt.Select("列名1='" + k + "' or 列名2='" + k + "'").ToList(); if (reslut.Count != 0) { return true; } else return false; }
可能有些人会直接写 string strIndex = "select * from [sheet1$] where [列名1]='"+k"'";这个也是可以的,只是有时候会报错 例如这种错误 标准表达式中数据类型不匹配 ,不是因为你语句写错了,而是因为excel中有表达式,所以我就把数据取出来放在datatable里了。
这算是导入吧,导出还没写过。
/// <summary> /// 查询文档-字段返回查询 /// </summary> /// <param name="k"></param> /// <returns></returns> public List<DataRow> SearchMatchSheet(string k) { string strMatch = "select * from [<span style="line-height: 19.2000007629395px;">表名1</span>$]"; string sheetName = "[表名1$]"; DataTable matchdt = new DataTable(); matchdt = SearchSheetToDT(strMatch, sheetName); var reslut = matchdt.Select("列名1='" + k + "'").ToList(); return reslut; }