asp.net Excel导入&导出

1、Excel数据导入到数据库中:

  1. //该方法实现从Excel中导出数据到DataSet中,其中filepath为Excel文件的绝对路径,sheetname为表示那个Excel表;
  2.         public DataSet ExcelDataSource( string filepath , string sheetname )
  3.         {
  4.             string strConn;
  5.             strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;";
  6.             OleDbConnection conn = new OleDbConnection(strConn);
  7.             OleDbDataAdapter oada = new OleDbDataAdapter ( "select * from [" + sheetname + "$]", strConn );
  8.             DataSet ds = new DataSet ();
  9.             oada.Fill ( ds );
  10.             return ds ;
  11.         }
复制代码

上面的代码实现了将Excel中的数据写进DataSet中,实现了这一步后,你可以按照自己的需要对获得DataSet进行处理,需要注意的一个问题是,你必须要指定sheetname,即Excel中的哪一个工作单需要导入,否则会出现错误。

2、如何从Excel中获得工作单(sheetname):

  1. //获得Excel中的所有sheetname。
  2. public ArrayList ExcelSheetName ( string filepath )
  3. {
  4.     ArrayList al = new ArrayList ();
  5.     string strConn;
  6.     strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;";
  7.     OleDbConnection conn = new OleDbConnection(strConn);
  8.     conn.Open ();
  9.     DataTable sheetNames = conn.GetOleDbSchemaTable
  10.     (System.Data.OleDb.OleDbSchemaGuid.Tables,new object[]{null,null,null,"TABLE"});
  11.     conn.Close ();
  12.     foreach ( DataRow dr in sheetNames.Rows )
  13.     {
  14.         al.Add ( dr[2] );
  15.     }
  16.     return al;
  17. }
复制代码

通过这两步,就基本可以实现将Excel导入到数据库中了,具体实现中的细节问题,你可以自己在实践中获得。

3、将数据库中的数据导入Excel中,在这里我讲叙自己实践中的两个方法:

方法一:从最基本的写文件入手,将从数据库中读出来的数据写入到Excel中;

  1. //该方法实现将数据导入到Excel文件中,其中的DataTable dt就是你需要将数据写入到Excel中的数据;
  2. public void ExportExcel( DataTable dt , StreamWriter w )
  3. {
  4.     try
  5.     {
  6.         for( int i = 0 ; i < dt.Columns.Count ; i ++ )
  7.         {
  8.             w.Write ( dt.Columns[i] );
  9.             w.Write( ' ' );
  10.         }
  11.         w.Write ( " " );
  12.         object[] values = new object [dt.Columns.Count];
  13.         foreach ( DataRow dr in dt.Rows )
  14.         {
  15.             values = dr.ItemArray ;
  16.             for ( int i = 0 ; i < dt.Columns.Count ; i++ )
  17.             {
  18.                 w.Write ( values[i] );
  19.                 w.Write ( ' ' );
  20.             }
  21.             w.Write ( " " );
  22.         }
  23.         w.Flush();
  24.         w.Close();
  25.     }
  26.     catch
  27.     {
  28.         w.Close();
  29.     }
  30. }
复制代码

StreamWriter w就是你自己创建的一个流,创建该数据流时,你需要自己指定需要将数据写入到那个文件,即指定文件路径,要实现下载的话,就可以简单的用Response.Redirect ( "指定需要被下载的文件路径" );

方法二:该方法实现的是将数据从DataGrid中导入到Excel中:

  1. //filename为Excel的名字,ToExcelGrid就是数据源,在此为DataGrid数据源;
  2. private void ExportExcelFromDataGrid( string filename , System.Web.UI.WebControls.DataGrid ToExcelGrid )
  3. {
  4.     Response.Clear();
  5.     Response.Buffer=   true;     
  6.     Response.Charset="utf-8";           
  7.     Response.AppendHeader("Content-Disposition","attachment;filename="+Server.UrlEncode ( filename ) );     
  8.     Response.ContentEncoding=System.Text.Encoding.GetEncoding("utf-8");//设置输出流为简体中文   
  9.    Response.ContentType   =   "application/ms-excel";//设置输出文件类型为excel文件。     
  10.    this.EnableViewState   =   false;           
  11.     System.Globalization.CultureInfo   myCItrad   =   new   System.Globalization.CultureInfo("ZH-CN",true);   
  12.     System.IO.StringWriter   oStringWriter   =   new   System.IO.StringWriter(myCItrad);     
  13.     System.Web.UI.HtmlTextWriter   oHtmlTextWriter   =   new   System.Web.UI.HtmlTextWriter(oStringWriter);   
  14.     ToExcelGrid.RenderControl(oHtmlTextWriter);     
  15.     Response.Write(oStringWriter.ToString());   
  16.     Response.End();
  17. }
复制代码

用该方法的时候,需要注意将DataGrid数据源中的允许翻页,允许排序设置成"false",同时一些特殊行进行需要将其设置成不可视,如编辑行等,若不这样的话,用该方法实现的数据导入到Excel,会出现异常“需要将XXX放入到一个具有runat=server的form窗体中”,我具体忘了XXX代表的意思,你可以在实践中尝试一下,就可以知道出现的错误。

 

 

http://www.csharp360.com/bbs/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值