C#导出数据到CSV文件的通用类实例
本文实例讲述了C#导出数据到csv文件的通用类。分享给大家供大家参考。具体如下:
通过这个类可以很简单的定义数据格式,并导出到csv文件
//这里写了一个通用的类
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections.Generic;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.Text;
usingSystem.Reflection;
usingSystem.IO;
usingSystem.Data.Odbc;
namespaceCom.DRPENG.SDXY.UI.Common
{
publicclassCSVHelper
{
#regionFields
string_fileName;
DataTable_dataSource;//数据源
string[]_titles=null;//列标题
string[]_fields=null;//字段名
#endregion
#region.ctor
///<summary>
///构造函数
///</summary>
///<paramname="dataSource">数据源</param>
publicCSVHelper()
{
}
///<summary>
///构造函数
///</summary>
///<paramname="titles">要输出到Excel的列标题的数组</param>
///<paramname="fields">要输出到Excel的字段名称数组</param>
///<paramname="dataSource">数据源</param>
publicCSVHelper(string[]titles,string[]fields,DataTabledataSource)
:this(titles,dataSource)
{
if(fields==null||fields.Length==0)
thrownewArgumentNullException("fields");
if(titles.Length!=fields.Length)
thrownewArgumentException("titles.Length!=fields.Length","fields");
_fields=fields;
}
///<summary>
///构造函数
///</summary>
///<paramname="titles">要输出到Excel的列标题的数组</param>
///<paramname="dataSource">数据源</param>
publicCSVHelper(string[]titles,DataTabledataSource)
:this(dataSource)
{
if(titles==null||titles.Length==0)
thrownewArgumentNullException("titles");
_titles=titles;
}
///<summary>
///构造函数
///</summary>
///<paramname="dataSource">数据源</param>
publicCSVHelper(DataTabledataSource)
{
if(dataSource==null)
thrownewArgumentNullException("dataSource");
//maybemorechecksneededhere(IEnumerable,IList,IListSource,)???
//很难判断,先简单的使用DataTable
_dataSource=dataSource;
}
#endregion
#regionpublicMethods
#region导出到CSV文件并且提示下载
///<summary>
///导出到CSV文件并且提示下载
///</summary>
///<paramname="fileName"></param>
publicvoidDataToCSV(stringfileName)
{
//确保有一个合法的输出文件名
//if(fileName==null||fileName==string.Empty||!(fileName.ToLower().EndsWith(".csv")))
//fileName=GetRandomFileName();
stringdata=ExportCSV();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Expires=0;
HttpContext.Current.Response.BufferOutput=true;
HttpContext.Current.Response.Charset="GB2312";
HttpContext.Current.Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
HttpContext.Current.Response.AppendHeader("Content-Disposition",string.Format("attachment;filename={0}.csv",System.Web.HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8)));
HttpContext.Current.Response.ContentType="text/h323;charset=gbk";
HttpContext.Current.Response.Write(data);
HttpContext.Current.Response.End();
}
#endregion
///<summary>
///获取CSV导入的数据
///</summary>
///<paramname="filePath">文件路径</param>
///<paramname="fileName">文件名称(.csv不用加)</param>
///<returns></returns>
publicDataTableGetCsvData(stringfilePath,stringfileName)
{
stringpath=Path.Combine(filePath,fileName+".csv");
stringconnString=@"Driver={MicrosoftTextDriver(*.txt;*.csv)};Dbq="+filePath+";Extensions=asc,csv,tab,txt;";
try
{
using(OdbcConnectionodbcConn=newOdbcConnection(connString))
{
odbcConn.Open();
OdbcCommandoleComm=newOdbcCommand();
oleComm.Connection=odbcConn;
oleComm.CommandText="select*from["+fileName+"#csv]";
OdbcDataAdapteradapter=newOdbcDataAdapter(oleComm);
DataSetds=newDataSet();
adapter.Fill(ds,fileName);
returnds.Tables[0];
odbcConn.Close();
}
if(File.Exists(path))
{
File.Delete(path);
}
}
catch(Exceptionex)
{
if(File.Exists(path))
{
File.Delete(path);
}
throwex;
}
}
#endregion
#region返回写入CSV的字符串
///<summary>
///返回写入CSV的字符串
///</summary>
///<returns></returns>
privatestringExportCSV()
{
if(_dataSource==null)
thrownewArgumentNullException("dataSource");
StringBuilderstrbData=newStringBuilder();
if(_titles==null)
{
//添加列名
foreach(DataColumncolumnin_dataSource.Columns)
{
strbData.Append(column.ColumnName+",");
}
strbData.Append("\n");
foreach(DataRowdrin_dataSource.Rows)
{
for(inti=0;i<_dataSource.Columns.Count;i++)
{
strbData.Append(dr[i].ToString()+",");
}
strbData.Append("\n");
}
returnstrbData.ToString();
}
else
{
foreach(stringcolumnNamein_titles)
{
strbData.Append(columnName+",");
}
strbData.Append("\n");
if(_fields==null)
{
foreach(DataRowdrin_dataSource.Rows)
{
for(inti=0;i<_dataSource.Columns.Count;i++)
{
strbData.Append(dr[i].ToString()+",");
}
strbData.Append("\n");
}
returnstrbData.ToString();
}
else
{
foreach(DataRowdrin_dataSource.Rows)
{
for(inti=0;i<_fields.Length;i++)
{
strbData.Append(_fields[i].ToString()+",");
}
strbData.Append("\n");
}
returnstrbData.ToString();
}
}
}
#endregion
#region得到一个随意的文件名
///<summary>
///得到一个随意的文件名
///</summary>
///<returns></returns>
privatestringGetRandomFileName()
{
Randomrnd=newRandom((int)(DateTime.Now.Ticks));
strings=rnd.Next(Int32.MaxValue).ToString();
returnDateTime.Now.ToShortDateString()+"_"+s+".csv";
}
#endregion
}
}
希望本文所述对大家的C#程序设计有所帮助。