轉:http://blog.csdn.net/smartyaya/archive/2006/09/29/1305361.aspx
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.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代表的意思,你可以在實踐中嘗試一下,就可以知道出現的錯誤。