C#导出数据到CSV文件的通用类实例
程序员文章站
2022-06-09 13:46:32
本文实例讲述了c#导出数据到csv文件的通用类。分享给大家供大家参考。具体如下:
通过这个类可以很简单的定义数据格式,并导出到csv文件
//这里写了一个通用的...
本文实例讲述了c#导出数据到csv文件的通用类。分享给大家供大家参考。具体如下:
通过这个类可以很简单的定义数据格式,并导出到csv文件
//这里写了一个通用的类 using system; using system.data; using system.configuration; using system.collections.generic; using system.web; using system.web.security; using system.web.ui; using system.web.ui.webcontrols; using system.web.ui.webcontrols.webparts; using system.web.ui.htmlcontrols; using system.text; using system.reflection; using system.io; using system.data.odbc; namespace com.drpeng.sdxy.ui.common { public class csvhelper { #region fields string _filename; datatable _datasource;//数据源 string[] _titles = null;//列标题 string[] _fields = null;//字段名 #endregion #region .ctor /// <summary> /// 构造函数 /// </summary> /// <param name="datasource">数据源</param> public csvhelper() { } /// <summary> /// 构造函数 /// </summary> /// <param name="titles">要输出到 excel 的列标题的数组</param> /// <param name="fields">要输出到 excel 的字段名称数组</param> /// <param name="datasource">数据源</param> public csvhelper(string[] titles, string[] fields, datatable datasource) : this(titles, datasource) { if (fields == null || fields.length == 0) throw new argumentnullexception("fields"); if (titles.length != fields.length) throw new argumentexception("titles.length != fields.length", "fields"); _fields = fields; } /// <summary> /// 构造函数 /// </summary> /// <param name="titles">要输出到 excel 的列标题的数组</param> /// <param name="datasource">数据源</param> public csvhelper(string[] titles, datatable datasource) : this(datasource) { if (titles == null || titles.length == 0) throw new argumentnullexception("titles"); _titles = titles; } /// <summary> /// 构造函数 /// </summary> /// <param name="datasource">数据源</param> public csvhelper(datatable datasource) { if (datasource == null) throw new argumentnullexception("datasource"); // maybe more checks needed here (ienumerable, ilist, ilistsource, ) ??? // 很难判断,先简单的使用 datatable _datasource = datasource; } #endregion #region public methods #region 导出到csv文件并且提示下载 /// <summary> /// 导出到csv文件并且提示下载 /// </summary> /// <param name="filename"></param> public void datatocsv(string filename) { // 确保有一个合法的输出文件名 //if (filename == null || filename == string.empty || !(filename.tolower().endswith(".csv"))) // filename = getrandomfilename(); string data = 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> /// <param name="filepath">文件路径</param> /// <param name="filename">文件名称(.csv不用加)</param> /// <returns></returns> public datatable getcsvdata(string filepath,string filename) { string path = path.combine(filepath, filename + ".csv"); string connstring = @"driver={microsoft text driver (*.txt; *.csv)};dbq=" + filepath + ";extensions=asc,csv,tab,txt;"; try { using (odbcconnection odbcconn = new odbcconnection(connstring)) { odbcconn.open(); odbccommand olecomm = new odbccommand(); olecomm.connection = odbcconn; olecomm.commandtext = "select * from [" + filename + "#csv]"; odbcdataadapter adapter = new odbcdataadapter(olecomm); dataset ds = new dataset(); adapter.fill(ds, filename); return ds.tables[0]; odbcconn.close(); } if (file.exists(path)) { file.delete(path); } } catch (exception ex) { if (file.exists(path)) { file.delete(path); } throw ex; } } #endregion #region 返回写入csv的字符串 /// <summary> /// 返回写入csv的字符串 /// </summary> /// <returns></returns> private string exportcsv() { if(_datasource==null) throw new argumentnullexception("datasource"); stringbuilder strbdata = new stringbuilder(); if (_titles == null) { //添加列名 foreach (datacolumn column in _datasource.columns) { strbdata.append(column.columnname + ","); } strbdata.append("\n"); foreach (datarow dr in _datasource.rows) { for (int i = 0; i < _datasource.columns.count; i++) { strbdata.append(dr[i].tostring() + ","); } strbdata.append("\n"); } return strbdata.tostring(); } else { foreach (string columnname in _titles) { strbdata.append(columnname + ","); } strbdata.append("\n"); if (_fields == null) { foreach (datarow dr in _datasource.rows) { for (int i = 0; i < _datasource.columns.count; i++) { strbdata.append(dr[i].tostring() + ","); } strbdata.append("\n"); } return strbdata.tostring(); } else { foreach (datarow dr in _datasource.rows) { for (int i = 0; i < _fields.length; i++) { strbdata.append(_fields[i].tostring() + ","); } strbdata.append("\n"); } return strbdata.tostring(); } } } #endregion #region 得到一个随意的文件名 /// <summary> /// 得到一个随意的文件名 /// </summary> /// <returns></returns> private string getrandomfilename() { random rnd = new random((int)(datetime.now.ticks)); string s = rnd.next(int32.maxvalue).tostring(); return datetime.now.toshortdatestring() + "_" + s + ".csv"; } #endregion } }
希望本文所述对大家的c#程序设计有所帮助。
上一篇: c#窗体传值用法实例详解