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 ...
随机推荐
- iOS如何把一个CGPoint存入数组里
CGPoint itemSprite1position = ccp(100,200): NSMutableArray * array = [[NSMutableArray alloc] initW ...
- java replace方法 无法改变原字符串,使用时需重新赋值
// TODO:把网页中的链接替换为本地路径及文件名 for (String link : links) { String baseLink = "http://localhost:91/q ...
- keras系列︱迁移学习:利用InceptionV3进行fine-tuning及预测、完美案例(五)
引自:http://blog.csdn.net/sinat_26917383/article/details/72982230 之前在博客<keras系列︱图像多分类训练与利用bottlenec ...
- HttpWebRequest、HttpWebResponse获取网页
1,通过HttpWebRequest.HttpWebResponse获取一个流 request = (HttpWebRequest)System.Net.WebRequest.Create(this. ...
- iptables配置文件/etc/sysconfig/iptables内容详解
#头两行是注释说明# Firewall configuration written by system-config-securitylevel# Manual customization of th ...
- Hive Tunning 补充 关于bucket
在前面的几篇文章当中一直有一个概念bucketing不清楚到底是怎么回事. 网友南京-李先森给了他收集的一些资料,如下: Buckets 对指定列计算 hash,根据 hash 值切分数据,目的是为了 ...
- Java设计模式(10)代理模式(Proxy模式)
理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣. Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,P ...
- 通过URI返回File文件
/** * 通过Uri返回File文件 * 注意:通过相机的是类似content://media/external/images/media/97596 * 通过相册选择的:file:///stora ...
- Matlab 读取excel文件提示服务器出现意外情况或无法读取问题解决
1.问题描述: 该错误通常发生在应用函数读取excel文件(后缀xls或xlsx)时. 应用xlsread函数读取提示服务器出现意外情况: 应用importdata读取时提示can‘t open fi ...
- C++ 模板 template
#include <iostream> using namespace std; /* 模板的作用: 1. 不用声明类型, 传什么进来就是什么类型, 返回也是什么类型 2. 方法封装起来, ...