zoukankan      html  css  js  c++  java
  • c# DataTable 导出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 HuaTong.General.Utility
    {
        public class CSVHelper
        {
            #region Fields
            string _fileName;
            DataTable _dataSource;//数据源
            string[] _titles = null;//列标题
            string[] _fields = null;//字段名
    
            List<string> listTitles = new List<string>();
            List<string> listFields = new List<string>();
            #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;
            }
    
            public CSVHelper(List<string> titles, List<string> fields, DataTable dataSource)
             : this(titles,dataSource)
            {
                if (fields == null || fields.Count == 0)
                    throw new ArgumentNullException("fields");
                if (titles.Count != fields.Count)
                    throw new ArgumentException("titles.Count != fields.Count", "fields");
                listFields = 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;
            }
    
            public CSVHelper(List<string> titles, DataTable dataSource)
             : this(dataSource)
            {
                if (titles == null || titles.Count == 0)
                    throw new ArgumentNullException("titles");
                listTitles = 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 byte[] DataToCSV(string fileName)
            {
                string data = listTitles.Count > 0 ? ExportCSVForActiveTitle():ExportCSV();
                return System.Text.Encoding.Default.GetBytes(data);
                /*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("
    ");
                    foreach (DataRow dr in _dataSource.Rows)
                    {
                        for (int i = 0; i < _dataSource.Columns.Count; i++)
                        {
                            strbData.Append(dr[i].ToString() + ",");
                        }
                        strbData.Append("
    ");
                    }
                    return strbData.ToString();
                }
                else
                {
                    foreach (string columnName in _titles)
                    {
                        strbData.Append(columnName + ",");
                    }
                    strbData.Append("
    ");
                    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("
    ");
                        }
                        return strbData.ToString();
                    }
                    else
                    {
                        foreach (DataRow dr in _dataSource.Rows)
                        {
                            for (int i = 0; i < _fields.Length; i++)
                            {
                                strbData.Append(dr[_fields[i]].ToString() + ",");
                            }
                            strbData.Append("
    ");
                        }
                        return strbData.ToString();
                    }
                }
            }
    
            private string ExportCSVForActiveTitle()
            {
                if (_dataSource == null)
                    throw new ArgumentNullException("dataSource");
                StringBuilder strbData = new StringBuilder();
                if (listTitles.Count == 0)
                {
                    //添加列名
                    foreach (DataColumn column in _dataSource.Columns)
                    {
                        strbData.Append(column.ColumnName + ",");
                    }
                    strbData.Append("
    ");
                    foreach (DataRow dr in _dataSource.Rows)
                    {
                        for (int i = 0; i < _dataSource.Columns.Count; i++)
                        {
                            strbData.Append(dr[i].ToString() + ",");
                        }
                        strbData.Append("
    ");
                    }
                    return strbData.ToString();
                }
                else
                {
                    foreach (string columnName in listTitles)
                    {
                        strbData.Append(columnName + ",");
                    }
                    strbData.Append("
    ");
                    if (listFields.Count == 0)
                    {
                        foreach (DataRow dr in _dataSource.Rows)
                        {
                            for (int i = 0; i < _dataSource.Columns.Count; i++)
                            {
                                strbData.Append(dr[i].ToString() + ",");
                            }
                            strbData.Append("
    ");
                        }
                        return strbData.ToString();
                    }
                    else
                    {
                        foreach (DataRow dr in _dataSource.Rows)
                        {
                            for (int i = 0; i < listFields.Count; i++)
                            {
                                strbData.Append(dr[listFields[i]].ToString() + ",");
                            }
                            strbData.Append("
    ");
                        }
                        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
        }
    }

    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 HuaTong.General.Utility
    {
        public class CSVHelper
        {
            #region Fields
            string _fileName;
            DataTable _dataSource;//数据源
            string[] _titles = null;//列标题
            string[] _fields = null;//字段名

            List<string> listTitles = new List<string>();
            List<string> listFields = new List<string>();
            #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;
            }

            public CSVHelper(List<string> titles, List<string> fields, DataTable dataSource)
             : this(titles,dataSource)
            {
                if (fields == null || fields.Count == 0)
                    throw new ArgumentNullException("fields");
                if (titles.Count != fields.Count)
                    throw new ArgumentException("titles.Count != fields.Count", "fields");
                listFields = 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;
            }

            public CSVHelper(List<string> titles, DataTable dataSource)
             : this(dataSource)
            {
                if (titles == null || titles.Count == 0)
                    throw new ArgumentNullException("titles");
                listTitles = 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 byte[] DataToCSV(string fileName)
            {
                string data = listTitles.Count > 0 ? ExportCSVForActiveTitle():ExportCSV();
                return System.Text.Encoding.Default.GetBytes(data);
                /*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(" ");
                    foreach (DataRow dr in _dataSource.Rows)
                    {
                        for (int i = 0; i < _dataSource.Columns.Count; i++)
                        {
                            strbData.Append(dr[i].ToString() + ",");
                        }
                        strbData.Append(" ");
                    }
                    return strbData.ToString();
                }
                else
                {
                    foreach (string columnName in _titles)
                    {
                        strbData.Append(columnName + ",");
                    }
                    strbData.Append(" ");
                    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(" ");
                        }
                        return strbData.ToString();
                    }
                    else
                    {
                        foreach (DataRow dr in _dataSource.Rows)
                        {
                            for (int i = 0; i < _fields.Length; i++)
                            {
                                strbData.Append(dr[_fields[i]].ToString() + ",");
                            }
                            strbData.Append(" ");
                        }
                        return strbData.ToString();
                    }
                }
            }

            private string ExportCSVForActiveTitle()
            {
                if (_dataSource == null)
                    throw new ArgumentNullException("dataSource");
                StringBuilder strbData = new StringBuilder();
                if (listTitles.Count == 0)
                {
                    //添加列名
                    foreach (DataColumn column in _dataSource.Columns)
                    {
                        strbData.Append(column.ColumnName + ",");
                    }
                    strbData.Append(" ");
                    foreach (DataRow dr in _dataSource.Rows)
                    {
                        for (int i = 0; i < _dataSource.Columns.Count; i++)
                        {
                            strbData.Append(dr[i].ToString() + ",");
                        }
                        strbData.Append(" ");
                    }
                    return strbData.ToString();
                }
                else
                {
                    foreach (string columnName in listTitles)
                    {
                        strbData.Append(columnName + ",");
                    }
                    strbData.Append(" ");
                    if (listFields.Count == 0)
                    {
                        foreach (DataRow dr in _dataSource.Rows)
                        {
                            for (int i = 0; i < _dataSource.Columns.Count; i++)
                            {
                                strbData.Append(dr[i].ToString() + ",");
                            }
                            strbData.Append(" ");
                        }
                        return strbData.ToString();
                    }
                    else
                    {
                        foreach (DataRow dr in _dataSource.Rows)
                        {
                            for (int i = 0; i < listFields.Count; i++)
                            {
                                strbData.Append(dr[listFields[i]].ToString() + ",");
                            }
                            strbData.Append(" ");
                        }
                        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
        }
    }

  • 相关阅读:
    ios可变数组的所有操作
    iOS不可变数组的所有操作
    Android 混淆打包
    Android 给TextView中的字体加上“中间线”
    Android 在ScrollView中嵌入ViewPage后ViewPage不能很好的工作的问题解决
    Android Bundle传递对象
    Java java.text.ParseException: Unparseable date
    Android关于LinearLayout和RelativeLayout背景设置的区别
    Android 给CheckBox设置背景
    Android String.xml中的符号总结
  • 原文地址:https://www.cnblogs.com/password1/p/5870684.html
Copyright © 2011-2022 走看看