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();

}

}

DataTableToExcel的更多相关文章

  1. .NET基础架构方法—DataTableToExcel通用方法

    p { display: block; margin: 3px 0 0 0; } --> .NET架构基础方法—DataTableToExcel通用方法(NPOI) 今天封装DataTaleTo ...

  2. 免费高效实用的.NET操作Excel组件NPOI(.NET组件介绍之六)

    很多的软件项目几乎都包含着对文档的操作,前面已经介绍过两款操作文档的组件,现在介绍一款文档操作的组件NPOI. NPOI可以生成没有安装在您的服务器上的Microsoft Office套件的Excel ...

  3. Aspose.Cells导出Excel(1)

    利用Aspose.Cells导出excel 注意的问题 1.DataTable的处理 2.进行编码,便于中文名文件下载 3.别忘了Aspose.Cells.dll(可以自己在网上搜索) public ...

  4. DataTable to Excel(使用NPOI、EPPlus将数据表中的数据读取到excel格式内存中)

    /// <summary> /// DataTable to Excel(将数据表中的数据读取到excel格式内存中) /// </summary> /// <param ...

  5. C# WinForm 导出导入Excel/Doc 完整实例教程[使用Aspose.Cells.dll]

    [csharp] view plain copy 1.添加引用: Aspose.Cells.dll(我们就叫工具包吧,可以从网上下载.关于它的操作我在“Aspose.Cells操作说明 中文版 下载 ...

  6. 使用NPOI读取Excel到DataTable

    一.NPOI介绍: 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office ...

  7. .NET导入导出Excel方法总结

    最近,应项目的需求,需要实现Excel的导入导出功能,对于Web架构的Excel导入导出功能,比较传统的实现方式是: 1)导入Excel:将Excel文件上传到服务器的某一文件夹下,然后在服务端完成E ...

  8. 分享一个前辈的NPOIhelper

    即拿即用: 首先要下载npoi的dll,此不赘述,接着添加引用: using NPOI.HPSF; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel ...

  9. 利用npoi导出Excel

    npoi库是当下最流行的处理Excel.Word.PPT等Office文件格式 npoi的下载地址:http://npoi.codeplex.com/ npoi的官方学习地址: http://www. ...

随机推荐

  1. API 进程、线程函数

    CancelWaitableTimer 这个函数用于取消一个可以等待下去的计时器操作 CallNamedPipe 这个函数由一个希望通过管道通信的一个客户进程调用 ConnectNamedPipe 指 ...

  2. js 数组去除空值

    for(var i = 0 ;i<wordarr.length;i++)                {                    if(wordarr[i] == "& ...

  3. [转] jQuery源码分析-如何做jQuery源码分析

    jQuery源码分析系列(持续更新) jQuery的源码有些晦涩难懂,本文分享一些我看源码的方法,每一个模块我基本按照这样的顺序去学习. 当我读到难度的书或者源码时,会和<如何阅读一本书> ...

  4. win7 摄像头驱动软件找不到,只有sys文件

    有的驱动只有sys文件,但是仍然可以在qq视频等用,只是找不到amcap.exe等可执行文件, 因为没有摄像头软件,下载一个安装上即可

  5. centos下cmake安装

    步骤一.安装gcc等必备程序包(已安装则略过此步,用gcc -v检测) yum install -y gcc gcc-c++ make automake 步骤二.安装wget (已安装则略过此步) y ...

  6. 二模 (8) day2

    第一题: 题目描述: 有 n 个炸弹,有些炸弹牵了一根单向引线(也就是说引线只有在这一端能被炸弹点燃),只要引爆了这个炸弹,用引线连接的下一个炸弹也会爆炸.每个炸弹还有个得分,当这个炸弹被引爆后就能得 ...

  7. 常州培训 day6 解题报告

    第一题: 题目大意: 给出一个N*N的矩阵,矩阵元素均为0或1.定义矩阵权值为sum(F[i][j]*F[j][i]); 给出K个操作: 询问矩阵的权值mod 2. 将矩阵的某一行元素取反(0变成1, ...

  8. $where $options: 'g','i'

    db.classes.update({"count":{$gt:20}},{$set:{"name":"c4"}},false,false) ...

  9. C++string的操作

    #include <iostream> using namespace std; int main() { //initilization string str("abc.ddd ...

  10. 基于MVC模式的应用框架之struts

    1.struts开发步骤 引入struts的jar包: 在web.xml中引入struts的核心功能,配置struts核心过滤器:(如果项目中用到了其他过滤器,要放在struts过滤器之前,否则会失效 ...