excel导出续
StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); HtmlTextWriter htw = new HtmlTextWriter(sw); Page page = new Page(); HtmlForm form = new HtmlForm(); gdvHidden.DataSource = VSDataTableGv; gdvHidden.DataBind(); gdvHidden.EnableViewState = false; page.EnableEventValidation = false; page.DesignerInitialize(); page.Controls.Add(form); form.Controls.Add(gdvHidden); page.RenderControl(htw); Response.Clear(); Response.Buffer = true; Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "_Detail.xls"); Response.Charset = "UTF-8"; Response.ContentEncoding = Encoding.Default; Response.Write(sb.ToString()); Response.End();
如果导出的文件过大,则需要用下面的方法,逐步导出
private void GetExcel( DataTable dt,string workName)
{
Byte[]
buffer;
string downloadFileName = workName +
".xls";
this.Response.Clear();
this.Response.ClearContent();
this.Response.ClearHeaders();
this.Response.Buffer
= false;
Response.ContentType
="application/ms-excel";
Response.AddHeader("Content-Disposition",
"attachment; filename=" + downloadFileName);
string data =
string.Empty;
data += "<table cellspacing=\"0\"
cellpadding=\"5\" rules=\"all\" border=\"1\">";
//写出列名
data += "<tr style=\"font-weight: bold; white-space:
nowrap;\">";
foreach (DataColumn column in dt.Columns)
{
data += "<td>" + column.Caption +
"</td>";
}
data += "</tr>";
buffer =
System.Text.Encoding.UTF8.GetBytes(data);
Response.OutputStream.Write(buffer,
0, buffer.Length);
Response.Flush();
data ="";
for ( int i=0;i
< dt.Rows.Count; i++ )
{
data += "<tr>";
foreach (DataColumn column in dt.Columns)
{
data += "<td
style=\"vnd.ms-excel.numberformat:@\">" + dt.Rows[i][column].ToString() +
"</td>";
}
data += "</tr>";
if( i% 100 == 0 || i == dt.Rows.Count-1
)
{
buffer =
System.Text.Encoding.UTF8.GetBytes(data);
Response.OutputStream.Write(buffer,
0, buffer.Length);
Response.Flush();
data=
"";
}
}
data = "</table>";
buffer =
System.Text.Encoding.UTF8.GetBytes(data);
Response.OutputStream.Write(buffer,
0,
buffer.Length);
Response.Flush();
this.Response.Clear();
this.Response.Close();
this.Response.End();
}