CSVHelper.cs內容:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Web;
6 using System.Threading;
7 using System.IO;
8 using System.Data;
9 using System.Windows.Forms;
10
11 namespace IMSCommonFunction
12 {
13 public class CSVHelper
14 {
15 public static string FilterCSVCell(string cellContent)
16 {
17 bool isAddFlag = false;
18 if (cellContent.IndexOf("\"") != -1)
19 {
20 cellContent = cellContent.Replace("\"", "\"\"");
21 cellContent = "\"" + cellContent + "\"";
22 isAddFlag = true;
23 }
24 if (cellContent.IndexOf(",") != -1 && isAddFlag != true)
25 {
26 cellContent = "\"" + cellContent + "\"";
27 }
28 return cellContent;
29 }
30
31 public static void ExportCSVFile(HttpResponse response, string fullPath, string Content)
32 {
33 try
34 {
35 response.Buffer = true;
36 response.Clear();
37 response.Charset = System.Text.Encoding.Default.BodyName;
38 response.ContentEncoding = System.Text.Encoding.UTF8;// System.Text.Encoding.GetEncoding("GB2312");//GB2312用Excel打開時,沒有亂碼。
39 response.AppendHeader("Content-Disposition", "attachment;filename=" + fullPath);
40 response.ContentType = "application/ms-excel";
41 response.Output.Write(Content);
42 response.Flush();
43 response.End();
44 }
45 catch (ThreadAbortException)
46 {
47 }
48 catch (Exception ex)
49 {
50 throw new ApplicationException(string.Format("Export CSV file have a error: {0}", fullPath), ex);
51 }
52 }
53
54 public static void FileDownload(string FullFileName)
55 {
56 FileInfo DownloadFile = new FileInfo(FullFileName);
57 System.Web.HttpContext.Current.Response.Clear();
58 System.Web.HttpContext.Current.Response.ClearHeaders();
59 System.Web.HttpContext.Current.Response.Buffer = false;
60 string extension = Path.GetExtension(FullFileName);
61 extension = string.IsNullOrEmpty(extension) ? extension : extension.ToLower();
62 switch (extension)
63 {
64 case ".xml":
65 System.Web.HttpContext.Current.Response.ContentType = "text/xml";
66 break;
67 default:
68 System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
69 break;
70 }
71 string browser = System.Web.HttpContext.Current.Request.UserAgent.ToUpper();
72 bool isNeedEncode = !browser.Contains("FIREFOX");
73 System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" +
74 (isNeedEncode ? System.Web.HttpUtility.UrlEncode(DownloadFile.Name, System.Text.Encoding.UTF8) : DownloadFile.Name));
75 System.Web.HttpContext.Current.Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());
76 System.Web.HttpContext.Current.Response.Flush();
77 if (System.Web.HttpContext.Current.Response.IsClientConnected)
78 System.Web.HttpContext.Current.Response.WriteFile(DownloadFile.FullName);
79
80 //出錯
81 System.Web.HttpContext.Current.Response.End();
82 System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest();
83 }
84
85 public static void DataHtmlToExcel(HttpResponse response, DataTable dt, string strFileName)
86 {
87 string style = @"<style> .text { mso-number-format:\@; } </script> "; //設置格式
88 //設置Response
89 response.Clear();
90 response.Buffer = true;
91 response.Charset = "utf-8";
92 response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
93 //Response.Charset = "utf-8";
94 if (strFileName.Length > 0)
95 {
96 response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(Encoding.UTF8.GetBytes(strFileName)));
97 }
98 else
99 {
100 response.AppendHeader("Content-Disposition", "attachment;filename=Excel.xls");
101 }
102 //Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
103 HttpContext.Current.Response.ContentType = "application/ms-excel";
104
105 //綁定數據到DataGrid1
106 System.Web.UI.WebControls.DataGrid DataGrid1 = new System.Web.UI.WebControls.DataGrid();
107 DataGrid1.DataSource = dt.DefaultView;
108 DataGrid1.DataBind();
109 //將DataGrid1構成的html代碼寫進StringWriter
110 //DataGrid1.Page.EnableViewState = false;
111 System.IO.StringWriter tw = new System.IO.StringWriter();
112 System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
113 DataGrid1.RenderControl(hw);
114
115 response.Write(style);//注意
116 response.Write(tw.ToString());
117 response.Flush();
118 response.End();
119 }
120
121 public static void ExportExcel(HttpResponse response, DataTable dt, string filename)
122 {
123 try
124 {
125 response.Clear();
126 response.BufferOutput = true;
127 response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
128 response.AppendHeader("Content-Disposition", "attachment;filename=" +
129 HttpUtility.UrlEncode(Encoding.UTF8.GetBytes(filename)));
130 response.ContentType = "application/ms-excel";
131 StringBuilder colHeaders = new StringBuilder();
132 StringBuilder items = new StringBuilder();
133
134 DataRow[] dr = dt.Select();
135
136 int i = 0;
137 int clength = dt.Columns.Count;
138
139 for (i = 0; i < clength; i++)
140 {
141 if (i == clength - 1)
142 {
143 colHeaders.Append(dt.Columns[i].Caption.ToString() + "\n");
144 }
145 else
146 {
147 colHeaders.Append(dt.Columns[i].Caption.ToString() + "\t");
148 }
149 }
150 response.Write(colHeaders.ToString());
151
152 foreach (DataRow row in dr)
153 {
154 for (i = 0; i < clength; i++)
155 {
156 if (i == clength - 1)
157 {
158 items.Append(row[i].ToString() + "\n");
159 }
160 else
161 {
162 items.Append(row[i].ToString() + "\t");
163 }
164 }
165 }
166 response.Write(items.ToString());
167 }
168 catch (Exception ex)
169 {
170 response.Write(ex.Message);
171 }
172 finally
173 {
174 response.Flush();
175 response.End();
176 }
177 }
178
179 public static void DataTableToCSV(DataTable table, string file)
180 {
181 string title = "";
182 FileStream fs = new FileStream(file, FileMode.Create);
183 StreamWriter sw = new StreamWriter(new BufferedStream(fs), System.Text.Encoding.Default);
184 for (int i = 0; i < table.Columns.Count; i++)
185 {
186 title += table.Columns[i].ColumnName + ",";
187 }
188 title = title.Substring(0, title.Length - 1) + "\n";
189 sw.Write(title);
190 foreach (DataRow row in table.Rows)
191 {
192 string line = "";
193 for (int i = 0; i < table.Columns.Count; i++)
194 {
195 line += row[i].ToString() + ",";
196 }
197 line = line.Substring(0, line.Length - 1) + "\n";
198 sw.Write(line);
199 }
200 sw.Close();
201 fs.Close();
202 }
204 }
205 }
頁面後台按鈕事件處理:
1 protected void btnExportCSV_Click(object sender, EventArgs e)
2 {
3 try
4 {
5 string sql = Server.UrlDecode(Request["Sql"]);
6 DataTable dt = Bll.Report.CustomReport.GetCustomReport(sql);
7 StringBuilder sbHeader = new StringBuilder();
8 StringBuilder sbContent = new StringBuilder();
9 DateTime tempDateTime = DateTime.MinValue;
10 string tempVal = "";
11 for (int i = 0, len = dt.Rows.Count; i < len; i++)
12 {
13 for (int j = 0, len2 = dt.Columns.Count; j < len2; j++)
14 {
15 if (i == 0)
16 {
17 sbHeader.AppendFormat("{0},", dt.Columns[j].ColumnName);
18 }
19 tempVal = dt.Rows[i][j].ToString();
20 if(DateTime.TryParse(tempVal,out tempDateTime))
21 tempVal = tempDateTime.ToString("dd-MM-yyyy HH:mm:ss");
22 sbContent.AppendFormat("{0},", IMSCommonFunction.CSVHelper.FilterCSVCell(tempVal));
23 }
24 sbContent.Remove(sbContent.Length - 1, 1);
25 sbContent.AppendLine();
26 }
27 sbHeader.Remove(sbHeader.Length - 1, 1);
28 sbHeader.AppendLine();
29 IMSCommonFunction.CSVHelper.ExportCSVFile(this.Response,
30 string.Format("CustomReport_{0}.csv", DateTime.Now.ToString("ddMMyyyy_HHmmss")),
31 sbHeader.ToString() + sbContent.ToString());
32 }
33 catch (Exception ex)
34 {
35 IMSCommonFunction.SystemEventLog.LogEvent("CustomReport.aspx,export csv file Errormsg", ex, "common", this.CurrentUserId);
36 this.ShowErrorMsg(ex);
37 }
38 }