关于oledb对Excel的读取(转)

这两天项目需求要检索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 档案可同时支援“读取”与“写入”用途。
Provider=Microsoft.ACE.OLEDB.12.0;这说明是excel2007以上的版本,xls文件一般都是03版本,Provider=Microsoft.Jet.OLEDB.4.0; 
详情连接字符根据版本怎么写可以参照网站:http://www.connectionstrings.com/excel/
在写的时候可能出现“找不到可安装的ISAM ”这个时候出现这种情况多可能是你的连接语句缺斤少两了,你仔细检查Extended Properties=‘Excel 12.0;HDR=Yes;IMEX=2‘"这个是不是少了分号什么的,我当时出错是因为Data Source这个,少了一个空格,写成了DataSource,找了好久。如果你确定真真没错,那就看看电脑有没有excel,重新安装ISAM呗。具体得操作步骤:在“运行”对话框中输入以下内容:Regsvr32 c:\WINDOWS\system32\msexcl40.dll  然后回车
之后就没问题,连接上了。就看操作语句


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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里了。
基本上对于excel的读取就这样了。
这算是导入吧,导出还没写过。

     /// <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;
        }
时间: 2024-09-30 20:04:21

关于oledb对Excel的读取(转)的相关文章

C#操作Excel文件(读取Excel,写入Excel)

看到论坛里面不断有人提问关于读取excel和导入excel的相关问题.闲暇时间将我所知道的对excel的操作加以总结,如今共享大家,希望给大家可以给大家带了一定的帮助.另外我们还要注意一些简单的问题1.excel文件仅仅能存储65535行数据,假设你的数据大于65535行,那么就须要将excel切割存放了.2.关于乱码,这主要是字符设置问题. 1.载入Excel(读取excel内容)返回值是一个DataSet //载入Excel public static DataSet LoadDataFro

关于OleDB连接Excel的Extended Properties(扩展属性)HDR=YES; IMEX=2个人理解心得

最近在用C#写一个创建Excel并将数据导出到Excel的WinForm程序, 让我对OleDB连接Excel的Extended Properties(扩展属性)HDR=YES; IMEX=2有了深刻的认识! 参数HDR的值: HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用.系统默认的是YES参数Excel 8.0 对于Excel 97以上到2003版本都用Excel 8.0,2007或2010的都用Extended Propert

C#使用oledb连接excel执行Insert Into语句出现“操作必须使用一个可更新的查询”的解决办法

我发生错误时的环境:Windows 7,Framework 4.0,Microsoft Office 2007,VS2010,c# WinForm: 部分代码: string strConn = "Provider=Microsoft.Ace.OleDb.12.0;Persist Security Info=False;" + "data source=" + @excelPath + ";Extended Properties='Excel 12.0;

oledb 操作 excel

oledb excel http://wenku.baidu.com/search?word=oledb%20excel&ie=utf-8&lm=0&od=0 [Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你! http://www.cnblogs.com/wolf-sun/p/3589605.html asp.net操作Excel(向excel模板添加数据) http://www.cnblogs.com/Silverlight_Team/

OLEDB操作Excel

使用OLEDB操作Excel 的方法 OleDbConnection conn = null;            try            {              //fileName 表示要操纵的Excel的文件路径,如果excel不存在,现创建它,可以通过模版文件复制创建.                string strConn;                strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +     

asp.net中使用OLEDB操作Excel

最近项目中需要导出Excel数据表单,试了好几种方法,都感觉不怎么顺手,然后老大喊我去看看OLEDB,我接着花世间去学习了一下,感觉还挺不错的. 开始在网上找了一些代码, 然后需要配置连接字符串 我电脑上安装的office 2007: 所以连接字符串为:"Provider=Microsoft.Ace.OleDb.12.0;Data Source=" + filepath + ";Extended properties=\"Excel 12.0; HDR=Yes;\&

C#彻底解决Oledb连接Excel数据类型不统一的问题

彻底解决Oledb连接Excel数据类型不统一的问题 在使用Microsoft.Jet.OLEDB.4.0连接Excel,进行读取数据,相对使用传统的COM来读取数据,效率是很高的.但相对传统COM操作Excel来说,及存在数据类型转换的问题. 因为使用OLEDB连接Excel读取数据时,需要确定数据的类型.默认情况使用连接字符串: view source print ? 1. string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Sou

使用oledb读写excel出现“操作必须使用一个可更新的查询”的解决办法

使用oledb读写excel出现"操作必须使用一个可更新的查询"的解决办法 转自:http://www.cnblogs.com/Richinger/archive/2008/09/28/1301170.html 前两天使用oledb连接excel的办法为单位某部门从一个excel的多个sheet中作连选抽出需要的数据,程序非常简单,结果很快就出来,原来手工需要很长时间才能选出的结果现在几乎一点击就有了结果.使用人员非常满意,由于是多人使用,开始只是将结果显示在一个页面上.后来他们要求将

在实现从excel中读取数据作为接口参数遇到的问题

这个算我自己第一次使用python语言实现 一个功能 一.首先我们先要代码实现如何从excel上读取数据python实现还是比较简单的 1.我使用的是xlrd模块,我们先要安装这个包,这样我们才可以使用它 安装方法: a.可以直接把文件拷贝到 $python_dir/Lib,这方法我试了一下不可以,我也不知道为什么 b.我下载了xlrd模块,在目录下运行了python setup.py install,成功了 可以去https://pypi.python.org/pypi/xlrd   官网下载