DataTable数据导出成Excel文件的小例子

时间:2022-09-26 09:25:52

代码如下:


/// 
/// 将DataTable中的数据导出到指定的Excel文件中 
/// 
/// Web页面对象 
/// 包含被导出数据的DataTable对象 
/// Excel文件的名称
public static void Export(System.Web.UI.Page page,System.Data.DataTable tab,string FileName) 

System.Web.HttpResponse httpResponse = page.Response; 
System.Web.UI.WebControls.DataGrid dataGrid=new System.Web.UI.WebControls.DataGrid(); 
dataGrid.DataSource=tab.DefaultView; 
dataGrid.AllowPaging = false; 
dataGrid.HeaderStyle.BackColor = System.Drawing.Color.Green; 
dataGrid.HeaderStyle.HorizontalAlign = HorizontalAlign.Center; 
dataGrid.HeaderStyle.Font.Bold = true; 
dataGrid.DataBind(); 
httpResponse.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(FileName,System.Text.Encoding.UTF8)); //filename="*.xls"; 
httpResponse.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312"); 
httpResponse.ContentType ="application/ms-excel"; 
System.IO.StringWriter tw = new System.IO.StringWriter() ; 
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw); 
dataGrid.RenderControl(hw);

 

string filePath = page.Server.MapPath("..")+"//Files//" +FileName; 
System.IO.StreamWriter sw = System.IO.File.CreateText(filePath); 
sw.Write(tw.ToString()); 
sw.Close();

DownFile(httpResponse,FileName,filePath);

httpResponse.End(); 

private static bool DownFile(System.Web.HttpResponse Response,string fileName,string fullPath) 

try 

Response.ContentType = "application/octet-stream";

Response.AppendHeader("Content-Disposition","attachment;filename=" + 
HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8) + ";charset=GB2312"); 
System.IO.FileStream fs= System.IO.File.OpenRead(fullPath); 
long fLen=fs.Length; 
int size=102400;//每100K同时下载数据 
byte[] readData = //www.zzvips.com/yongle_tianya/archive/2011/10/24/new byte[size];//指定缓冲区的大小 
if(size>fLen)size=Convert.ToInt32(fLen); 
long fPos=0; 
bool isEnd=false; 
while (!isEnd) 

if((fPos+size)>fLen) 

size=Convert.ToInt32(fLen-fPos); 
readData = //www.zzvips.com/yongle_tianya/archive/2011/10/24/new byte[size]; 
isEnd=true; 

fs.Read(readData, 0, size);//读入一个压缩块 
Response.BinaryWrite(readData); 
fPos+=size; 

fs.Close(); 
System.IO.File.Delete(fullPath); 
return true; 

catch 

return false;