(1)使用DataTable导出Excel
其中使用StringWriter类:将信息写入字符串。其命名空间为:System.IO
具体的原理是:
首先读取DataTable中的列名,然后循环读取DataTable行值。
然后设置导出的编码,导出的类型。
最后输出StringWriter对象即可。
这种导出是将文件直接以文件流的形式输出到浏览器。
- private StringWriter GetStringWriter(DataTable dt)
- {
- StringWriter sw = new StringWriter();
- //读列名
- foreach (DataColumn dc in dt.Columns)
- sw.Write(dc.ColumnName + "\t");
- //读列值
- //重新的一行
- sw.Write(sw.NewLine);
- if (dt != null)
- {
- foreach (DataRow dr in dt.Rows)
- {
- for (int i = 0; i < dt.Columns.Count; i++)
- {
- sw.Write(dr[i].ToString() + "\t");
- }
- sw.Write(sw.NewLine);
- }
- }
- sw.Close();
- return sw;
- }
- protected void ExcelImport(DataTable dt, string ExportFileName)
- {
- StringWriter sw = GetStringWriter(dt);
- //当前编码
- HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
- //把输出的文件名进行编码
- string fileName = HttpUtility.UrlEncode (ExportFileName, System.Text.Encoding.UTF8);
- //文件名
- string str = "attachment;filename=" + fileName + ".xls";
- //把文件头输出,此文件头激活文件下载框
- HttpContext.Current.Response.AppendHeader("Content-Disposition", str);//http报头文件
- HttpContext.Current.Response.ContentType = "application/ms-excel";
- this.Page.EnableViewState = false;