DataTableTo Excel、Csv

public static void CreateByDataTable(DataSet ds, string fileName, string path)
        {
            XlsDocument doc = new XlsDocument();
            doc.FileName = fileName;
            int index = 1;
            foreach (DataTable dt in ds.Tables)
            {
                string[] files = dt.TableName.Split('\\');
                string file = files[files.Length - 1];
                Worksheet sheet = null;
                if (file.Length > 31)//名字不能超过31个字符
                {
                    sheet = doc.Workbook.Worksheets.Add("Sheet" + index++);
                }
                else
                {
                    sheet = doc.Workbook.Worksheets.Add(file);
                }
                //增加Title
                for (int i = 1; i <= dt.Columns.Count; i++)
                {
                    string caption = dt.Columns[i - 1].Caption;
                    if (string.IsNullOrEmpty(caption))
                        caption = dt.Columns[i - 1].ColumnName;
                    sheet.Cells.Add(1, i, caption);
                }

                //增加数据行
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    for (int j = 1; j <= dt.Columns.Count; j++)
                    {
                        sheet.Cells.Add(i + 2, j, dt.Rows[i][j - 1].ToString());
                    }
                }
            }

            doc.Save(path, true);
        }

        /// <summary>
        /// 生成Csv文件
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="fileName"></param>
        /// <param name="path"></param>
        public static void CreateCsvByDataTable(DataTable dt, string fileName, string path)
        {
            System.IO.StreamWriter sw = null;
            try
            {
                sw = new System.IO.StreamWriter(System.IO.Path.Combine(path, fileName), false, Encoding.UTF8);
                //增加Title
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    if (i < dt.Columns.Count - 1)
                    {
                        sw.Write(dt.Columns[i].ColumnName + ",");
                    }
                    else
                    {
                        sw.Write(dt.Columns[i].ColumnName);
                    }
                }

                sw.Write("\r\n");

                //增加数据行
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        if (j < dt.Columns.Count - 1)
                        {
                            sw.Write(dt.Rows[i][j].ToString().Replace(',', ' ').Replace('"', ' ') + ",");
                        }
                        else
                        {
                            sw.Write(dt.Rows[i][j].ToString().Replace(',', ' ').Replace('"', ' '));
                        }
                    }
                    sw.Write("\r\n");
                }
            }
            finally
            {
                if (sw != null)
                    sw.Close();
            }
        }


// List To DataTable

        /// <summary>
        /// list转化为table
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entitys"></param>
        /// <returns></returns>
        public static DataTable ListToDataTable<T>(List<T> entitys)
        {

            //检查实体集合不能为空
            if (entitys == null || entitys.Count < 1)
            {
                return new DataTable();
            }

            //取出第一个实体的所有Propertie
            Type entityType = entitys[0].GetType();
            PropertyInfo[] entityProperties = entityType.GetProperties();

            //生成DataTable的structure
            //生产代码中,应将生成的DataTable结构Cache起来,此处略
            DataTable dt = new DataTable("dt");
            for (int i = 0; i < entityProperties.Length; i++)
            {
                //dt.Columns.Add(entityProperties[i].Name, entityProperties[i].PropertyType);
                dt.Columns.Add(entityProperties[i].Name);
            }

            //将所有entity添加到DataTable中
            foreach (object entity in entitys)
            {
                //检查所有的的实体都为同一类型
                if (entity.GetType() != entityType)
                {
                    throw new Exception("要转换的集合元素类型不一致");
                }
                object[] entityValues = new object[entityProperties.Length];
                for (int i = 0; i < entityProperties.Length; i++)
                {
                    entityValues[i] = entityProperties[i].GetValue(entity, null);

                }
                dt.Rows.Add(entityValues);
            }
            return dt;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值