odbc 读写 操作 Excel

来源:互联网 发布:sql修改数据语句 编辑:程序博客网 时间:2024/05/22 10:50

实在受不了com操作excel的慢,只有换一种看看效果。 

 

 

C# 操作Excel之Excel操作方法调用

C# 操作Excel之Excel操作方法调用1.插入图片和线调用

  1. PictureInExcel ipt = new PictureInExcel();  
  2. ipt.Open();  
  3. //ipt.InsertPicture("B2", @"C:/www.jpg");  
  4. //ipt.InsertPicture("B8", @"C:/www.jpg", 1000, 800);  
  5. ipt.InsertPicture("B2","F8", @"C:/www.jpg",true);  
  6. ipt.InsertLine("B9""F15"true);  
  7. ipt.InsertPicture("B16""F22", @"C:/www.jpg"false);  
  8. ipt.InsertLine("B23""F29"false);  
  9. ipt.SaveFile(@"C:/ExcelTest.xls");  
  10. ipt.Dispose(); 

C# 操作Excel之Excel操作方法调用2.删除行方法调用

  1. PictureInExcel ipt = new PictureInExcel();  
  2. ipt.Open(@"C:/ExcelTest.xls");  
  3. ipt.DeleteRow(1,1);  
  4. ipt.SaveFile(@"C:/ExcelTest.xls");  
  5. ipt.Dispose(); 

C# 操作Excel之Excel操作方法调用3.删除列方法调用

  1. PictureInExcel ipt = new PictureInExcel();  
  2. ipt.Open(@"C:/ExcelTest.xls");  
  3. ipt.DeleteColumn(1, 1);  
  4. ipt.SaveFile(@"C:/ExcelTest.xls");  
  5. ipt.Dispose(); 

C# 操作Excel之Excel操作方法调用的基本内容就向你介绍到这里,希望对你了解和学习C# 操作Excel有所帮助。

 

 

 

 

 

 

 

 

 

 

 

对Excel的操作时很频繁的,用哪种方法更合适,那就看系统的应用了。

下面应用odbc读写Excel特别方便、简单。
便随笔随笔更多好方法还望高手留笔
首先当然要引用using System.Data.Odbc 名称空间。
具体读Excel方法:


  OdbcConnection Connnection = new OdbcConnection();  Connnection.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};DBQ=" + itemFile;  OdbcCommand cmd = new OdbcCommand();  cmd.Connection = Connnection;  cmd.CommandText = "SELECT * FROM [Sheet1$]";  OdbcDataAdapter oda = new OdbcDataAdapter(cmd);  DataTable dt = new DataTable();  oda.Fill(dt);  Connnection.Close();


具体写Excel 方法:

  OdbcConnection Connnection = new OdbcConnection();  Connnection.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};Readonly=0;DBQ=" + itemFile;  OdbcCommand cmd = new OdbcCommand();  cmd.Connection = Connnection;  Connnection.Open();     cmd.CommandText="Insert into [Sheet1$] (name,password) values ('admin','admin')";  cmd.ExecuteNonQuery();  Connnection.Close();


如果更新的话,CommandText值改成Update语句就可以了。觉得值得注意的地方:执行写操作时,ConnectionString要设置Excel文件可写。 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

    /// <summary>
    /// 导入EXCEL到DataSet
    /// </summary>
    /// <param name="fileName">Excel全路径文件名</param>
    /// <returns>导入成功的DataSet</returns>
    public DataSet ImportExcel(string fileName)
    {
        //判断是否安装EXCEL
        Excel.Application xlApp = new Excel.ApplicationClass();
        if (xlApp == null)
        {
            _ReturnStatus = -1;
            _ReturnMessage = "无法创建Excel对象,可能您的计算机未安装Excel";
            return null;
        }

 

        //判断文件是否被其他进程使用            
        Excel.Workbook workbook;
        try
        {
            workbook = xlApp.Workbooks.Open(fileName, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, 1, 0);
        }
        catch
        {
            _ReturnStatus = -1;
            _ReturnMessage = "Excel文件处于打开状态,请保存关闭";
            return null;
        }

 

        //获得所有Sheet名称
        int n = workbook.Worksheets.Count;
        string[] SheetSet = new string[n];
        System.Collections.ArrayList al = new System.Collections.ArrayList();
        for (int i = 1; i <= n; i++)
        {
            SheetSet[i - 1] = ((Excel.Worksheet)workbook.Worksheets[i]).Name;
        }

 

        //释放Excel相关对象
        workbook.Close(null, null, null);
        xlApp.Quit();
        if (workbook != null)
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
            workbook = null;
        }
        if (xlApp != null)
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
            xlApp = null;
        }
        GC.Collect();

 

        //把EXCEL导入到DataSet
        DataSet ds = new DataSet();
        string connStr = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + fileName + ";Extended Properties=Excel 8.0";
        using (OleDbConnection conn = new OleDbConnection(connStr))
        {
            conn.Open();
            OleDbDataAdapter da;
            for (int i = 1; i <= n; i++)
            {
                string sql = "select * from [" + SheetSet[i - 1] + "$] ";
                da = new OleDbDataAdapter(sql, conn);
                da.Fill(ds, SheetSet[i - 1]);
                da.Dispose();
            }
            conn.Close();
            conn.Dispose();
        }
        return ds;
    }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

string   strCon   =   "   Provider   =   Microsoft.Jet.OLEDB.4.0   ;   Data   Source   =   c://sample.xls;Extended   Properties=Excel   8.0"   ;  
  OleDbConnection   myConn   =   new   OleDbConnection   (   strCon   )   ;  
  string   strCom   =   "   SELECT   *   FROM   [Sheet1$]   "   ;  
  myConn.Open   (   )   ;  
  file://打开数据链接,得到一个数据集  
  OleDbDataAdapter   myCommand   =   new   OleDbDataAdapter   (   strCom   ,   myConn   )   ;  
  file://创建一个   DataSet对象  
  myDataSet   =   new   DataSet   (   )   ;  
  file://得到自己的DataSet对象  
  myCommand.Fill   (   myDataSet   ,   "[Sheet1$]"   )   ;  
  file://关闭此数据链接  
  myConn.Close   (   )   ;      
    
  http://www.yesky.com/20020313/1601534.shtml

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

--如果接受数据导入的表已经存在        
      insert           into           表           select           *           from                
      OPENROWSET('MICROSOFT.JET.OLEDB.4.0’        
      ,'Excel           5.0;HDR=YES;DATABASE=c:/test.xls',sheet1$)        
           
      --如果导入数据并生成表        
      select           *           into           表           from                
      OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’        
      ,’Excel           5.0;HDR=YES;DATABASE=c:/test.xls’,sheet1$)        
           
      insert       into       Student       select       *       from                
      OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel       5.0;HDR=YES;DATABASE=E:/w.xls',sheet1$)        
           
           
           
      select       *       into       Student       from       OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel       5.0;HDR=YES;DATABASE=E:/w.xls',sheet1$)        
      /*===================================================================*/        
      --如果从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:        
      insert           into           OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’        
      ,’Excel           5.0;HDR=YES;DATABASE=c:/test.xls’,sheet1$)        
      select           *           from           表        
           
           
      --如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写:        
      --导出表的情况        
      EXEC           master..xp_cmdshell           ’bcp           数据库名.dbo.表名           out           "c:/test.xls"           /c           -/S"服务器名"           /U"用户名"           -P"密码"’        
           
      --导出查询的情况        
      EXEC           master..xp_cmdshell           ’bcp           "SELECT           au_fname,           au_lname           FROM           pubs..authors           ORDER           BY           au_lname"           queryout           "c:/test.xls"           /c           -/S"服务器名"           /U"用户名"           -P"密码"’        
           
      说明.        
           
      c:/test.xls                   为导入/导出的Excel文件名.        
      sheet1$                                                   为Excel文件的工作表名,一般要加上$才能正常使用.        
           
                   
           
      下面是导出真正Excel文件的方法:        
           
           
      /*--数据导出EXCEL        
                   
              导出表中的数据到Excel,包含字段名,文件为真正的Excel文件        
              ,如果文件不存在,将自动创建文件        
              ,如果表不存在,将自动创建表        
              基于通用性考虑,仅支持导出标准数据类型        
      ---*/        
           
      /*--调用示例        
           
              p_exporttb           @tbname=’地区资料’,@path=’c:/’,@fname=’aa.xls’        
      --*/        
      if           exists           (select           *           from           dbo.sysobjects           where           id           =           object_id(N’[dbo].[p_exporttb]’)           and           OBJECTPROPERTY(id,           N’IsProcedure’)           =           1)        
      drop           procedure           [dbo].[p_exporttb]        
      GO        
           
      create           proc           p_exporttb        
      @tbname           sysname,                                   --要导出的表名,注意只能是表名/视图名        
      @path           nvarchar(1000),                           --文件存放目录        
      @fname           nvarchar(250)=’’                   --文件名,默认为表名        
      as        
      declare           @err           int,@src           nvarchar(255),@desc           nvarchar(255),@out           int        
      declare           @obj           int,@constr           nvarchar(1000),@sql           varchar(8000),@fdlist           varchar(8000)        
           
      --参数检测        
      if           isnull(@fname,’’)=’’           set           @fname=@tbname+’.xls’        
           
      --检查文件是否已经存在        
      if           right(@path,1)<>’/’           set           @path=@path+’/’        
      create           table           #tb(a           bit,b           bit,c           bit)        
      set           @sql=@path+@fname        
      insert           into           #tb           exec           master..xp_fileexist           @sql        
           
      --数据库创建语句        
      set           @sql=@path+@fname        
      if           exists(select           1           from           #tb           where           a=1)        
              set           @constr=’DRIVER={Microsoft           Excel           Driver           (*.xls)};DSN=’’’’;READONLY=FALSE’        
                                                              +’;CREATE_DB="’+@sql+’";DBQ=’+@sql        
      else        
              set           @constr=’Provider=Microsoft.Jet.OLEDB.4.0;Extended           Properties="Excel           5.0;HDR=YES’        
                                      +’;DATABASE=’+@sql+’"’        
           
      --连接数据库        
      exec           @err=sp_oacreate           ’adodb.connection’,@obj           out        
      if           @err<>0           goto           lberr        
           
      exec           @err=sp_oamethod           @obj,’open’,null,@constr        
      if           @err<>0           goto           lberr        
           
      --创建表的SQL        
      select           @sql=’’,@fdlist=’’        
      select           @fdlist=@fdlist+’,’+a.name        
              ,@sql=@sql+’,[’+a.name+’]           ’        
                      +case           when           b.name           in(’char’,’nchar’,’varchar’,’nvarchar’)           then        
                                              ’text(’+cast(case           when           a.length>255           then           255           else           a.length           end           as           varchar)+’)’        
                              when           b.name           in(’tynyint’,’int’,’bigint’,’tinyint’)           then           ’int’        
                              when           b.name           in(’smalldatetime’,’datetime’)           then           ’datetime’        
                              when           b.name           in(’money’,’smallmoney’)           then           ’money’        
                              else           b.name           end        
      FROM           syscolumns           a           left           join           systypes           b           on           a.xtype=b.xusertype        
      where           b.name           not           in(’image’,’text’,’uniqueidentifier’,’sql_variant’,’ntext’,’varbinary’,’binary’,’timestamp’)        
              and           object_id(@tbname)=id        
      select           @sql=’create           table           [’+@tbname        
              +’](’+substring(@sql,2,8000)+’)’        
              ,@fdlist=substring(@fdlist,2,8000)        
           
      exec           @err=sp_oamethod           @obj,’execute’,@out           out,@sql        
      if           @err<>0           goto           lberr        
           
      exec           @err=sp_oadestroy           @obj        
           
      --导入数据        
      set           @sql=’openrowset(’’MICROSOFT.JET.OLEDB.4.0’’,’’Excel           5.0;HDR=YES        
                              ;DATABASE=’+@path+@fname+’’’,[’+@tbname+’$])’        
           
      exec(’insert           into           ’+@sql+’(’+@fdlist+’)           select           ’+@fdlist+’           from           ’+@tbname)        
           
      return        
           
      lberr:        
              exec           sp_oageterrorinfo           0,@src           out,@desc           out        
      lbexit:        
              select           cast(@err           as           varbinary(4))           as           错误号        
                      ,@src           as           错误源,@desc           as           错误描述        
              select           @sql,@constr,@fdlist        
      go        
           
                   
           
      *--数据导出EXCEL        
                   
              导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件        
              ,如果文件不存在,将自动创建文件        
              ,如果表不存在,将自动创建表        
              基于通用性考虑,仅支持导出标准数据类型        
      --*/        
           
      /*--调用示例        
           
              p_exporttb           @sqlstr=’select           *           from           地区资料’        
                      ,@path=’c:/’,@fname=’aa.xls’,@sheetname=’地区资料’        
      --*/        
      if           exists           (select           *           from           dbo.sysobjects           where           id           =           object_id(N’[dbo].[p_exporttb]’)           and           OBJECTPROPERTY(id,           N’IsProcedure’)           =           1)        
      drop           procedure           [dbo].[p_exporttb]        
      GO        
           
      create           proc           p_exporttb        
      @sqlstr           sysname,                                   --查询语句,如果查询语句中使用了order           by           ,请加上top           100           percent,注意,如果导出表/视图,用上面的存储过程        
      @path           nvarchar(1000),                           --文件存放目录        
      @fname           nvarchar(250),                           --文件名        
      @sheetname           varchar(250)=’’                   --要创建的工作表名,默认为文件名        
      as                
      declare           @err           int,@src           nvarchar(255),@desc           nvarchar(255),@out           int        
      declare           @obj           int,@constr           nvarchar(1000),@sql           varchar(8000),@fdlist           varchar(8000)