Small example of DataTable data exported as Excel files

  • 2020-06-01 09:34:31
  • OfStack


/// 
///  will DataTable Is exported to the specified Excel In the file  
/// 
/// Web The page object  
///  Containing the exported data DataTable object  
/// Excel Name of file 
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;// every 100K Download data at the same time  
byte[] readData = https://www.ofstack.com/yongle_tianya/archive/2011/10/24/new byte[size];// Specifies the size of the buffer  
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 = https://www.ofstack.com/yongle_tianya/archive/2011/10/24/new byte[size]; 
isEnd=true; 
} 
fs.Read(readData, 0, size);// Read in 1 A compression block  
Response.BinaryWrite(readData); 
fPos+=size; 
} 
fs.Close(); 
System.IO.File.Delete(fullPath); 
return true; 
} 
catch 
{ 
return false; 
} 
} 


Related articles: