前幾天項(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 >咯。