把DataGrid导出成Excel或者Word文档
1
private void Export(System.Web.UI.WebControls.DataGrid dg,string fileName,string typeName)
2
{
3![]()
4
System.Web.HttpResponse httpResponse = Page.Response;
5
httpResponse.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8));
6
httpResponse.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
7
httpResponse.ContentType = typeName;
8
System.IO.StringWriter tw = new System.IO.StringWriter() ;
9
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);
10
dg.RenderControl(hw);
11
string filePath = Server.MapPath("..")+fileName;
12
System.IO.StreamWriter sw = System.IO.File.CreateText(filePath);
13
sw.Write(tw.ToString());
14
sw.Close();
15![]()
16
DownFile(httpResponse,fileName,filePath);
17
httpResponse.End();
18
}
19![]()
20
private bool DownFile(System.Web.HttpResponse Response,string fileName,string fullPath)
21
{
22
try
23
{
24
Response.ContentType = "application/octet-stream";
25![]()
26
Response.AppendHeader("Content-Disposition","attachment;filename=" +
27
HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8) + ";charset=GB2312");
28
System.IO.FileStream fs= System.IO.File.OpenRead(fullPath);
29
long fLen=fs.Length;
30
int size=102400;//每100K同时下载数据
31
byte[] readData = new byte[size];//指定缓冲区的大小
32
if(size>fLen)size=Convert.ToInt32(fLen);
33
long fPos=0;
34
bool isEnd=false;
35
while (!isEnd)
36
{
37
if((fPos+size)>fLen)
38
{
39
size=Convert.ToInt32(fLen-fPos);
40
readData = new byte[size];
41
isEnd=true;
42
}
43
fs.Read(readData, 0, size);//读入一个压缩块
44
Response.BinaryWrite(readData);
45
fPos+=size;
46
}
47
fs.Close();
48
System.IO.File.Delete(fullPath);
49
return true;
50
}
51
catch
52
{
53
return false;
54
}
55
}
56![]()
57![]()
58
private void btnWord_Click(object sender, System.EventArgs e)
59
{
60
Export(dataGrid,"FileName.doc","application/ms-word");
61![]()
62
}
63![]()
64
private void btnExcel_Click(object sender, System.EventArgs e)
65
{
66
Export(dataGrid,"FileName.xls","application/ms-excel");
67
}
private void Export(System.Web.UI.WebControls.DataGrid dg,string fileName,string typeName)2
{3

4
System.Web.HttpResponse httpResponse = Page.Response;5
httpResponse.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8)); 6
httpResponse.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");7
httpResponse.ContentType = typeName;8
System.IO.StringWriter tw = new System.IO.StringWriter() ;9
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);10
dg.RenderControl(hw);11
string filePath = Server.MapPath("..")+fileName;12
System.IO.StreamWriter sw = System.IO.File.CreateText(filePath);13
sw.Write(tw.ToString());14
sw.Close();15

16
DownFile(httpResponse,fileName,filePath);17
httpResponse.End();18
}19

20
private bool DownFile(System.Web.HttpResponse Response,string fileName,string fullPath)21
{22
try23
{24
Response.ContentType = "application/octet-stream";25

26
Response.AppendHeader("Content-Disposition","attachment;filename=" + 27
HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8) + ";charset=GB2312");28
System.IO.FileStream fs= System.IO.File.OpenRead(fullPath);29
long fLen=fs.Length;30
int size=102400;//每100K同时下载数据 31
byte[] readData = new byte[size];//指定缓冲区的大小 32
if(size>fLen)size=Convert.ToInt32(fLen);33
long fPos=0;34
bool isEnd=false;35
while (!isEnd) 36
{ 37
if((fPos+size)>fLen)38
{39
size=Convert.ToInt32(fLen-fPos);40
readData = new byte[size];41
isEnd=true;42
}43
fs.Read(readData, 0, size);//读入一个压缩块 44
Response.BinaryWrite(readData);45
fPos+=size;46
} 47
fs.Close(); 48
System.IO.File.Delete(fullPath);49
return true;50
}51
catch52
{53
return false;54
}55
}56

57

58
private void btnWord_Click(object sender, System.EventArgs e)59
{60
Export(dataGrid,"FileName.doc","application/ms-word");61

62
}63

64
private void btnExcel_Click(object sender, System.EventArgs e)65
{66
Export(dataGrid,"FileName.xls","application/ms-excel");67
}



浙公网安备 33010602011771号