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#程序设计有所帮助。