DataTable内容导出为CSV文件
CSVHelper.cs内容:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Threading;
using System.IO;
using System.Data;
using System.Windows.Forms; namespace IMSCommonFunction
{
public class CSVHelper
{
public static string FilterCSVCell(string cellContent)
{
bool isAddFlag = false;
if (cellContent.IndexOf("\"") != -)
{
cellContent = cellContent.Replace("\"", "\"\"");
cellContent = "\"" + cellContent + "\"";
isAddFlag = true;
}
if (cellContent.IndexOf(",") != - && isAddFlag != true)
{
cellContent = "\"" + cellContent + "\"";
}
return cellContent;
} public static void ExportCSVFile(HttpResponse response, string fullPath, string Content)
{
try
{
response.Buffer = true;
response.Clear();
response.Charset = System.Text.Encoding.Default.BodyName;
response.ContentEncoding = System.Text.Encoding.UTF8;// System.Text.Encoding.GetEncoding("GB2312");//GB2312用Excel打开时,没有乱码。
response.AppendHeader("Content-Disposition", "attachment;filename=" + fullPath);
response.ContentType = "application/ms-excel";
response.Output.Write(Content);
response.Flush();
response.End();
}
catch (ThreadAbortException)
{
}
catch (Exception ex)
{
throw new ApplicationException(string.Format("Export CSV file have a error: {0}", fullPath), ex);
}
} public static void FileDownload(string FullFileName)
{
FileInfo DownloadFile = new FileInfo(FullFileName);
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.ClearHeaders();
System.Web.HttpContext.Current.Response.Buffer = false;
string extension = Path.GetExtension(FullFileName);
extension = string.IsNullOrEmpty(extension) ? extension : extension.ToLower();
switch (extension)
{
case ".xml":
System.Web.HttpContext.Current.Response.ContentType = "text/xml";
break;
default:
System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
break;
}
string browser = System.Web.HttpContext.Current.Request.UserAgent.ToUpper();
bool isNeedEncode = !browser.Contains("FIREFOX");
System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" +
(isNeedEncode ? System.Web.HttpUtility.UrlEncode(DownloadFile.Name, System.Text.Encoding.UTF8) : DownloadFile.Name));
System.Web.HttpContext.Current.Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());
System.Web.HttpContext.Current.Response.Flush();
if (System.Web.HttpContext.Current.Response.IsClientConnected)
System.Web.HttpContext.Current.Response.WriteFile(DownloadFile.FullName); //出错
System.Web.HttpContext.Current.Response.End();
System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest();
} public static void DataHtmlToExcel(HttpResponse response, DataTable dt, string strFileName)
{
string style = @"<style> .text { mso-number-format:\@; } </script> "; //设置格式
//设置Response
response.Clear();
response.Buffer = true;
response.Charset = "utf-8";
response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
//Response.Charset = "utf-8";
if (strFileName.Length > )
{
response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(Encoding.UTF8.GetBytes(strFileName)));
}
else
{
response.AppendHeader("Content-Disposition", "attachment;filename=Excel.xls");
}
//Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
HttpContext.Current.Response.ContentType = "application/ms-excel"; //绑定数据到DataGrid1
System.Web.UI.WebControls.DataGrid DataGrid1 = new System.Web.UI.WebControls.DataGrid();
DataGrid1.DataSource = dt.DefaultView;
DataGrid1.DataBind();
//将DataGrid1构成的html代码写进StringWriter
//DataGrid1.Page.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
DataGrid1.RenderControl(hw); response.Write(style);//注意
response.Write(tw.ToString());
response.Flush();
response.End();
} public static void ExportExcel(HttpResponse response, DataTable dt, string filename)
{
try
{
response.Clear();
response.BufferOutput = true;
response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
response.AppendHeader("Content-Disposition", "attachment;filename=" +
HttpUtility.UrlEncode(Encoding.UTF8.GetBytes(filename)));
response.ContentType = "application/ms-excel";
StringBuilder colHeaders = new StringBuilder();
StringBuilder items = new StringBuilder(); DataRow[] dr = dt.Select(); int i = ;
int clength = dt.Columns.Count; for (i = ; i < clength; i++)
{
if (i == clength - )
{
colHeaders.Append(dt.Columns[i].Caption.ToString() + "\n");
}
else
{
colHeaders.Append(dt.Columns[i].Caption.ToString() + "\t");
}
}
response.Write(colHeaders.ToString()); foreach (DataRow row in dr)
{
for (i = ; i < clength; i++)
{
if (i == clength - )
{
items.Append(row[i].ToString() + "\n");
}
else
{
items.Append(row[i].ToString() + "\t");
}
}
}
response.Write(items.ToString());
}
catch (Exception ex)
{
response.Write(ex.Message);
}
finally
{
response.Flush();
response.End();
}
} public static void DataTableToCSV(DataTable table, string file)
{
string title = "";
FileStream fs = new FileStream(file, FileMode.Create);
StreamWriter sw = new StreamWriter(new BufferedStream(fs), System.Text.Encoding.Default);
for (int i = ; i < table.Columns.Count; i++)
{
title += table.Columns[i].ColumnName + ",";
}
title = title.Substring(, title.Length - ) + "\n";
sw.Write(title);
foreach (DataRow row in table.Rows)
{
string line = "";
for (int i = ; i < table.Columns.Count; i++)
{
line += row[i].ToString() + ",";
}
line = line.Substring(, line.Length - ) + "\n";
sw.Write(line);
}
sw.Close();
fs.Close();
}
}
}
页面后台按钮事件处理:
protected void btnExportCSV_Click(object sender, EventArgs e)
{
try
{
string sql = Server.UrlDecode(Request["Sql"]);
DataTable dt = Bll.Report.CustomReport.GetCustomReport(sql);
StringBuilder sbHeader = new StringBuilder();
StringBuilder sbContent = new StringBuilder();
DateTime tempDateTime = DateTime.MinValue;
string tempVal = "";
for (int i = , len = dt.Rows.Count; i < len; i++)
{
for (int j = , len2 = dt.Columns.Count; j < len2; j++)
{
if (i == )
{
sbHeader.AppendFormat("{0},", dt.Columns[j].ColumnName);
}
tempVal = dt.Rows[i][j].ToString();
if(DateTime.TryParse(tempVal,out tempDateTime))
tempVal = tempDateTime.ToString("dd-MM-yyyy HH:mm:ss");
sbContent.AppendFormat("{0},", IMSCommonFunction.CSVHelper.FilterCSVCell(tempVal));
}
sbContent.Remove(sbContent.Length - , );
sbContent.AppendLine();
}
sbHeader.Remove(sbHeader.Length - , );
sbHeader.AppendLine();
IMSCommonFunction.CSVHelper.ExportCSVFile(this.Response,
string.Format("CustomReport_{0}.csv", DateTime.Now.ToString("ddMMyyyy_HHmmss")),
sbHeader.ToString() + sbContent.ToString());
}
catch (Exception ex)
{
IMSCommonFunction.SystemEventLog.LogEvent("CustomReport.aspx,export csv file Errormsg", ex, "common", this.CurrentUserId);
this.ShowErrorMsg(ex);
}
}
DataTable内容导出为CSV文件的更多相关文章
- c#将DataTable内容导出为CSV文件
写了个类: class DataTableAndCSV { public static DataTable csvToDataTable(string file) { string strConn = ...
- java导出生成csv文件
首先我们需要对csv文件有基础的认识,csv文件类似excel,可以使用excel打开,但是csv文件的本质是逗号分隔的,对比如下图: txt中显示: 修改文件后缀为csv后显示如下: 在java中我 ...
- 淘宝助理导出的csv文件使用的是什么编码,您猜?
今天下午用Java读取从淘宝助理 V4.3 Beta1导出的csv文件,出现中文乱码情况. 一看就是文件编码引起的,不清楚淘宝助理导出的csv文件使用了什么编码,到百度搜索了一下,看到一些相关文章,但 ...
- R: 导入 csv 文件,导出到csv文件,;绘图后导出为图片、pdf等
################################################### 问题:导入 csv 文件 如何从csv文件中导入数据,?参数怎么设置?常用参数模板是啥? 解决方 ...
- 如何从sql server导出到csv文件
如何从sql server导出到csv文件,具体代码如下: private static void WriteHeader(SqlDataReader reader, TextWriter outpu ...
- oracle导出多CSV文件的靠谱的
oracle导出多CSV文件的问题 ---------------------------------------------------------------------- 用ksh脚本从orac ...
- 原创 Datareader 导出为csv文件方法
DataReader 是游标只读数据, 如果是大数据导出,用Datatable 将耗费巨大内存资源.因为Datatable 其实就是内存中的一个数据表 代码如下 /// <summary> ...
- 将DataTable内容导出到Excel表格的两种方法
方法一:循环DataTable单元格内容拼接字符串,利用StreamWriter的Write方法将字符串写入Excel文件中 这种方法很实现很简单.拼接字符串时,每个单元格之间添加'\t'(表示一个占 ...
- 导出到CSV文件
一.手工导出导出 1.winform void DataGridViewToExcel(DataGridView dataGridView1) { SaveFileDialog saveFileDia ...
随机推荐
- bash里wget失败
直接使用wget是可以的,然而在shell脚本里却不行,后来发现原来是换行符的问题,编辑器默认的是\r\n,一不留神,自己把自己坑了
- [转]JSTL 与 JSP 或者 Java 相互传递变量的代码
原文地址:http://blog.csdn.net/joyous/article/details/6689861 两种方式 <c:set var="s1" value=&qu ...
- PHPUnit 在phpstrom中composer项目的应用配置
在phpstorm的composer搭建的项目调试时出现这种错误时:是其配置的错误 'Cannot create phar '/data/AppStorm/DesignPatternsPHP/vend ...
- 【UE4】VR模式下全屏(去掉两侧的黑边)
1.下载UE4源码,用Visual Studio打开源码找到指定文件,修改代码后重新编译得到一个新的UE4编辑器 2.将游戏项目在新的UE4中打开,重新编译. 参考: https://caedmom. ...
- 对于PHP中enum的好奇
PHP中没有struct.enum这些东西,虽然万能的array用起来很爽,但写出来的代码typo问题很多.可维护性也差,需要更多的测试来辅助,而一旦加上测试的工作量是否还谈得上『爽』就是个问号了. ...
- gSoap的“error LNK2001: 无法解析的外部符号 _namespaces”解决方法
错误 2 error LNK2001: 无法解析的外部符号 _namespaces 解决方法: 1. 在工程中定义 WITH_NONAMESPACES 宏 2.尝试 "#include &q ...
- 8大排序算法总结 JS 实现
//bubble sort ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 fun ...
- HBase Rowkey的散列与预分区设计
转自:http://www.cnblogs.com/bdifn/p/3801737.html 问题导读:1.如何防止热点?2.如何预分区?扩展:为什么会产生热点存储? HBase中,表会被划分为1.. ...
- Zookeeper 快速理解
转自:http://blog.csdn.net/colorant/article/details/8444283 == 是什么 == 目标Scope(解决什么问题) 为分布式系统提供高可靠性的协同工作 ...
- 传统餐饮O2O支付体系成难题
传统餐饮O2O支付体系成难题 网的数据化参考,使得门店运营更具科学性. 作为“易淘食”这样的订餐网站,主要依靠与餐厅分成 来获得利润.“根据每个餐厅合作情况不同,每一笔订单我们可获得5%-15%的佣金 ...