zoukankan      html  css  js  c++  java
  • DataTableToExcel

    public static string CreateExcel(DataTable dt, string FileName, string path, string columns)         {

                string excelPath = path + "Code\ZipExcel\" + FileName + "_" + DateTime.Now.ToString("yyyyMMddHHmmsss") + ".xlsx";

                string connString = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + excelPath + ";Extended Properties='Excel 12.0 xml; HDR=Yes; IMEX=0;'";             if (dt == null)             {                 return "";             }

                int rows = dt.Rows.Count;             int cols = dt.Columns.Count;             StringBuilder sb;

                if (rows == 0)             {                 return "";             }

                sb = new StringBuilder();

                //生成创建表的脚本             sb.Append("CREATE TABLE ");             sb.Append("[ReportData] " + " ( ");

                for (int i = 0; i < cols; i++)             {                 if (i < cols - 1)                     if (columns.IndexOf(dt.Columns[i].ColumnName) > -1)                     {                         sb.Append(string.Format(" [{0}] Numeric(18,2),", dt.Columns[i].ColumnName));                     }                     else                     {                         sb.Append(string.Format(" [{0}] Varchar,", dt.Columns[i].ColumnName));                     }

                    else                     if (columns.IndexOf(dt.Columns[i].ColumnName) > -1)                     {                         sb.Append(string.Format(" [{0}] Numeric(18,2))", dt.Columns[i].ColumnName));                     }                     else                     {                         sb.Append(string.Format(" [{0}] Varchar )", dt.Columns[i].ColumnName));                     }

                }

                OleDbConnection objConn = new OleDbConnection(connString);             OleDbCommand objCmd = new OleDbCommand();             objCmd.Connection = objConn;

                objCmd.CommandText = sb.ToString();

                //try             //{             objConn.Open();             objCmd.ExecuteNonQuery();

                //}             //catch (Exception e)             //{             //    return "";

                //}

                //生成插入数据脚本#region 生成插入数据脚本             sb.Remove(0, sb.Length);             sb.Append("INSERT INTO ");             sb.Append("[ReportData]" + " ( ");

                for (int i = 0; i < cols; i++)             {                 if (i < cols - 1)                     sb.Append("[" + dt.Columns[i].ColumnName + "]" + ",");                 else                     sb.Append("[" + dt.Columns[i].ColumnName + "]" + ") values (");             }

                for (int i = 0; i < cols; i++)             {                 if (i < cols - 1)                     sb.Append("@" + "para" + i.ToString() + ",");

                    else                     sb.Append("@" + "para" + i.ToString() + ")");             }             //#endregion

                //建立插入动作的Command             objCmd.CommandText = sb.ToString();             OleDbParameterCollection param = objCmd.Parameters;

                for (int i = 0; i < cols; i++)             {                 if (columns.IndexOf(dt.Columns[i].ColumnName) > -1)                 {                     param.Add(new OleDbParameter("@" + "para" + i.ToString(), OleDbType.Numeric));                 }                 else                 {                     param.Add(new OleDbParameter("@" + "para" + i.ToString(), OleDbType.VarChar));                 }             }

                int curRow = 0;

                //遍历DataTable将数据插入新建的Excel文件中             foreach (DataRow row in dt.Rows)             {

                    for (int i = 0; i < param.Count; i++)                 {                     if (columns.IndexOf(dt.Columns[i].ColumnName) > -1)                     {                         if (row[i] == null || row[i].ToString() == "")                         {                             param[i].Value = 0;                         }                         else                         {                             param[i].Value = row[i];                         }

                        }                     else                     {                         param[i].Value = row[i];                     }

                    }

                    objCmd.ExecuteNonQuery();

                    curRow = curRow + 1;             }

                objConn.Close();

                return excelPath;         }         public static void DataTableToExcel(DataTable dt, string FileName, string path, string columns)         {             ArrayList filelist = new ArrayList();             string IsZip = "";             string excelPath = "";             if (dt.Rows.Count < 50000)             {                 IsZip = "0";                 excelPath = Kit.CreateExcel(dt, FileName, path, columns);             }             else if (dt.Rows.Count < 1000000)             {                 IsZip = "1";                 excelPath = Kit.CreateExcel(dt, FileName, path, columns);                 if (excelPath != "")                 {                     filelist.Add(excelPath);                 }             }             else             {                 DataTable dtOneSheet = dt.Clone();                 int order = 1;                 for (int i = 0; i < dt.Rows.Count; i++)                 {                     dtOneSheet.ImportRow(dt.Rows[i]);

                        if (i > 0 && ((i + 1) == dt.Rows.Count || (i + 1) % 1000000 == 0))                     {                         excelPath = Kit.CreateExcel(dtOneSheet, FileName + "_" + order.ToString(), path, columns);                         order = order + 1;                         if (excelPath != "")                         {                             filelist.Add(excelPath);                         }                         dtOneSheet.Clear();                     }                 }                 IsZip = "2";             }

                string Date = DateTime.Now.ToString("yyyyMMddHH");

                if (IsZip == "0")             {                 FileStream excelFile = new FileStream(excelPath, FileMode.Open);//实例化一个FileStream对象                 byte[] byData = new byte[excelFile.Length];//建立一个FileStream要用的字节组                 excelFile.Read(byData, 0, byData.Length);                 excelFile.Dispose();                 File.Delete(excelPath);

                    HttpResponse resp;                 resp = HttpContext.Current.Response;                 resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");

                    resp.AppendHeader("Content-disposition", "attachment;filename=" + System.Web.HttpUtility.UrlPathEncode(FileName + "_" + DateTime.Now.ToString("yyyyMMddHHmmsss") + ".xlsx"));

                    resp.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

                    resp.BinaryWrite(byData);                 resp.End();             }             if (IsZip == "1" || IsZip == "2")             {                 string downFileName = FileName + DateTime.Now.ToString("yyyyMMddHHmmsss") + ".zip";                 string filename = path + "Code\ZipExcel\" + FileName + Date + ".zip";                 CreateZip(path + "Code\ZipExcel\", filename, filelist);

                    FileStream excelFile = new FileStream(filename, FileMode.Open);//实例化一个FileStream对象                 byte[] byData = new byte[excelFile.Length];//建立一个FileStream要用的字节组                 excelFile.Read(byData, 0, byData.Length);                 excelFile.Dispose();

                    File.Delete(filename);                 for (int count = 0; count < filelist.Count; count++)                 {                     File.Delete(filelist[count].ToString());                 }

                    HttpResponse resp;                 resp = HttpContext.Current.Response;                 resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");

                    resp.AppendHeader("Content-disposition", "attachment;filename=" + System.Web.HttpUtility.UrlPathEncode(downFileName));

                    resp.ContentType = "application/zip";

                    resp.BinaryWrite(byData);                 resp.End();

                }

            }

  • 相关阅读:
    java处理数据库date类型数据
    in与exist , not in与not exist 的区别
    Eclipse的调试功能的10个小窍门
    关于Synchornized,Lock,AtomicBoolean和volatile的区别介绍
    推荐使用concurrent包中的Atomic类
    深入 Java 调试体系: 第 1 部分,JPDA 体系概览
    dom 绘制正方形
    dom 拖拽div
    dom 按着shift多选
    dom select选单
  • 原文地址:https://www.cnblogs.com/wanglg/p/3287071.html
Copyright © 2011-2022 走看看