C# .net 将数据导出excel字段字符长度超出excel单元格限制时使用CSV文件导出

datatable导出成CSV文件,并下载

public void ExportToCSV(DataTable dt, string fileName)
        {
            StringBuilder sb = new StringBuilder();
            int i = 0;
            for (i = 0; i <= dt.Columns.Count - 1; i++)
            {
                if (i > 0) { sb.Append(","); }
                sb.Append(dt.Columns[i].ColumnName);
            }
            sb.Append("\n");
            foreach (DataRow dr in dt.Rows)
            {
                for (i = 0; i <= dt.Columns.Count - 1; i++)
                {
                    if (i > 0) { sb.Append(","); }
                    sb.Append(dr[i].ToString().Replace(",",""));
                }
                sb.Append("\n");
            }

            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(sb.ToString());
            byte[] outBuffer = new byte[buffer.Length + 3];
            outBuffer[0] = (byte)0xEF;
            outBuffer[1] = (byte)0xBB;
            outBuffer[2] = (byte)0xBF;
            Array.Copy(buffer, 0, outBuffer, 3, buffer.Length);

            System.Web.HttpResponse rs = System.Web.HttpContext.Current.Response;
            rs.ContentEncoding = System.Text.Encoding.UTF8;
            rs.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
            rs.ContentType = "application/ms-excel";
            rs.Write(Encoding.UTF8.GetString(outBuffer));
            rs.Flush();
            rs.End();
        }

 

CSV文件上传导入到datatable中

public DataTable GetdataFromCVS(Stream stream)

        {

            DataTable dt = new DataTable();

            StreamReader sr = new StreamReader(stream);

            string strTitle = sr.ReadLine();

            string[] strColumTitle = strTitle.Split(',');   //CVS 文件默认以逗号隔开

            for (int i = 0; i < strColumTitle.Length; i++)

            {

                dt.Columns.Add(strColumTitle[i]);

            }

            while (!sr.EndOfStream)

            {

                string strTest = sr.ReadLine();

                string[] strTestAttribute = strTest.Split(',');

                DataRow dr = dt.NewRow();

                for (int i = 0; i < strColumTitle.Length; i++)

                {

                    dr[strColumTitle[i]] = strTestAttribute[i];

                }

                dt.Rows.Add(dr);

            }

            return dt;

        }

 

非常方便好用数据存储量大,字段长度不限制格式简单方便

posted @ 2018-12-11 14:39  不懂就查资料  阅读(1676)  评论(0编辑  收藏  举报