asp.net Excel导入&导出,转

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

...{

for( int 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.Append

Header("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的导入和导出就汇总到这,同时也望各位网友,多多指教。^_^

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/smartyaya/archive/2006/09/29/1305361.aspx