zoukankan      html  css  js  c++  java
  • asp.net Excel导入&导出

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

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

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

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

    //获得Excel中的所有sheetname。
    public ArrayList ExcelSheetName ( string filepath )
    {
        ArrayList al 
    = new ArrayList ();
        
    string strConn;
        strConn 
    = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;";
        OleDbConnection conn 
    = new OleDbConnection(strConn);
        conn.Open ();
        DataTable sheetNames 
    = conn.GetOleDbSchemaTable
        (System.Data.OleDb.OleDbSchemaGuid.Tables,
    new object[]{null,null,null,"TABLE"});
        conn.Close ();
        
    foreach ( DataRow dr in sheetNames.Rows )
        
    {
            al.Add ( dr[
    2] );
        }

        
    return al;
    }

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

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

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

    //该方法实现将数据导入到Excel文件中,其中的DataTable dt就是你需要将数据写入到Excel中的数据;
    public void ExportExcel( DataTable dt , StreamWriter w )
    {
        
    try
        
    {
            
    forint i = 0 ; i < dt.Columns.Count ; i ++ )
            
    {
                w.Write ( dt.Columns[i] );
                w.Write( 
    ' ' );
            }

            w.Write ( 
    " " );

            
    object[] values = new object [dt.Columns.Count];
            
    foreach ( DataRow dr in dt.Rows )
            
    {
                values 
    = dr.ItemArray ;
                
    for ( int i = 0 ; i < dt.Columns.Count ; i++ )
                
    {
                    w.Write ( values[i] );
                    w.Write ( 
    ' ' );
                }

                w.Write ( 
    " " );
            }

            w.Flush();
            w.Close();
        }

        
    catch
        
    {
            w.Close();
        }

    }

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

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

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

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

    好了,对Excel的导入和导出就汇总到这,同时也望各位网友,多多指教。^_^

  • 相关阅读:
    里氏代换原则
    依赖倒转原则
    开放-封闭原则
    如何判断对象是否死亡和类是无用的类
    Java内存区域
    Zookeeper使用场景
    zookeeper知识点总结
    前端小技术总结
    lambda表达式的使用
    Comparator进行List集合排序
  • 原文地址:https://www.cnblogs.com/wubin264/p/1449912.html
Copyright © 2011-2022 走看看