將DataGrid數(shù)據(jù)寫(xiě)入Excel文件

2010-08-28 10:48:52來(lái)源:西部e網(wǎng)作者:

前幾天項(xiàng)目中有個(gè)地方需要將DataGrid的數(shù)據(jù)直接導(dǎo)入Excel里,以提供給用戶(hù)下載,在網(wǎng)上找了下,好像都是與下面代碼類(lèi)似的實(shí)現(xiàn):
程序代碼:

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);
this.DataGrid1.RenderControl(oHtmlTextWriter);  
Response.Write(oStringWriter.ToString());
Response.End();
 

原理也就是把DataGrid的信息以流的形式寫(xiě)到html輸出流的形式實(shí)現(xiàn),自己嘗試下,好像可以。我裝的windowxp sp2版的,后來(lái)到同事的機(jī)器上去試,結(jié)果就出問(wèn)題了,每次執(zhí)行的時(shí)候,彈出那個(gè)【打開(kāi)、保存、取消】的頁(yè)面,再一點(diǎn),結(jié)果整個(gè)站點(diǎn)的頁(yè)面都關(guān)閉了,再到其他機(jī)器上去試,結(jié)果有的能正常下載,有的就不行,以前聽(tīng)說(shuō)過(guò)有這么個(gè)問(wèn)題,好像也沒(méi)什么好的辦法解決。

后來(lái)考慮了下,何必不直接把寫(xiě)到html流的信息直接寫(xiě)到一個(gè)excel文件里面去讓客戶(hù)直接下載excel,于是稍微修改了下別人的源碼,直接生成Excel文件來(lái)讓客戶(hù)下載,演示源代碼如下:

WebForm4.aspx----Html部分:

程序代碼:

頁(yè)面上就一個(gè)DataGrid和一個(gè)按鈕,按鈕用來(lái)觸發(fā)將數(shù)據(jù)到Excel,后臺(tái)的其他代碼也就不弄上來(lái)了,下面是那個(gè)關(guān)鍵的按鈕事件
程序代碼:

private void Button1_Click(object sender, System.EventArgs e)
{
 DataTable SourceTb = new DataTable();
 DataColumn myDataColumn;

 myDataColumn   = new DataColumn();
 myDataColumn.DataType = System.Type.GetType("System.String");
 myDataColumn.ColumnName = "RowIndex";  //序  號(hào)
 SourceTb.Columns.Add(myDataColumn);

 myDataColumn   = new DataColumn();
 myDataColumn.DataType = System.Type.GetType("System.String");
 myDataColumn.ColumnName = "CheckUpManName"; //審批人
 SourceTb.Columns.Add(myDataColumn);

 myDataColumn   = new DataColumn();
 myDataColumn.DataType = System.Type.GetType("System.String");
 myDataColumn.ColumnName = "CheckUpIdeas"; //審批意見(jiàn)
 SourceTb.Columns.Add(myDataColumn);

 myDataColumn   = new DataColumn();
 myDataColumn.DataType = System.Type.GetType("System.String");
 myDataColumn.ColumnName = "CheckUpDate"; //審批時(shí)間
 SourceTb.Columns.Add(myDataColumn);

 myDataColumn   = new DataColumn();
 myDataColumn.DataType = System.Type.GetType("System.String");
 myDataColumn.ColumnName = "CheckUpRole"; //審批崗位
 SourceTb.Columns.Add(myDataColumn);

 myDataColumn   = new DataColumn();
 myDataColumn.DataType = System.Type.GetType("System.String");
 myDataColumn.ColumnName = "HandleType";  //操作類(lèi)型(1:提交| 9:駁回)
 SourceTb.Columns.Add(myDataColumn);

 DataRow myDataRow;
 for(int i = 0;i < 30;i ++)
 {
  myDataRow     = SourceTb.NewRow();
  myDataRow["RowIndex"]  = i.ToString();
  myDataRow["CheckUpManName"] = "張三";
  myDataRow["CheckUpIdeas"] = "同意";
  myDataRow["CheckUpDate"] = "2006-03-20";
  myDataRow["CheckUpRole"] = "物資部主任";
  SourceTb.Rows.Add(myDataRow);
 }

 //綁定數(shù)據(jù)到DataGrid1
 this.DataGrid1.DataSource = SourceTb.DefaultView;
 this.DataGrid1.DataBind();
 //將DataGrid1構(gòu)成的html代碼寫(xiě)進(jìn)StringWriter
 this.DataGrid1.Page.EnableViewState = false;
 System.IO.StringWriter  tw   = new System.IO.StringWriter();
 System.Web.UI.HtmlTextWriter hw  = new System.Web.UI.HtmlTextWriter(tw);
 this.DataGrid1.RenderControl(hw);
 string HtmlInfo = tw.ToString().Trim();

 string DocFileName = "審批信息.xls";
 string FilePathName = Request.PhysicalPath;
 FilePathName  = FilePathName.Substring(0,FilePathName.LastIndexOf("\\"));
 //得到Excel文件的物理地址
 FilePathName  = FilePathName +"\\" + DocFileName;
 System.IO.File.Delete(FilePathName);
 FileStream Fs  = new FileStream(FilePathName, FileMode.Create);
 BinaryWriter BWriter= new BinaryWriter(Fs,System.Text.Encoding.GetEncoding("GB18030"));
 //將DataGrid的信息寫(xiě)入Excel文件
 BWriter.Write(HtmlInfo);
 BWriter.Close();
 Fs.Close();
}
 

好了,寫(xiě)入信息到Excel文件成功了,至于說(shuō)生成的Excel文件在哪里,大家一看就應(yīng)該知道,要下載的話(huà),也就是很簡(jiǎn)單的< a href='Excel文件路徑' >文件下載< /a >咯。

作者BLOG:http://blog.csdn.net/ppluncle/

關(guān)鍵詞:ASP.NET

贊助商鏈接: