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();
}
}
DataTableToExcel的更多相关文章
- .NET基础架构方法—DataTableToExcel通用方法
p { display: block; margin: 3px 0 0 0; } --> .NET架构基础方法—DataTableToExcel通用方法(NPOI) 今天封装DataTaleTo ...
- 免费高效实用的.NET操作Excel组件NPOI(.NET组件介绍之六)
很多的软件项目几乎都包含着对文档的操作,前面已经介绍过两款操作文档的组件,现在介绍一款文档操作的组件NPOI. NPOI可以生成没有安装在您的服务器上的Microsoft Office套件的Excel ...
- Aspose.Cells导出Excel(1)
利用Aspose.Cells导出excel 注意的问题 1.DataTable的处理 2.进行编码,便于中文名文件下载 3.别忘了Aspose.Cells.dll(可以自己在网上搜索) public ...
- DataTable to Excel(使用NPOI、EPPlus将数据表中的数据读取到excel格式内存中)
/// <summary> /// DataTable to Excel(将数据表中的数据读取到excel格式内存中) /// </summary> /// <param ...
- C# WinForm 导出导入Excel/Doc 完整实例教程[使用Aspose.Cells.dll]
[csharp] view plain copy 1.添加引用: Aspose.Cells.dll(我们就叫工具包吧,可以从网上下载.关于它的操作我在“Aspose.Cells操作说明 中文版 下载 ...
- 使用NPOI读取Excel到DataTable
一.NPOI介绍: 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office ...
- .NET导入导出Excel方法总结
最近,应项目的需求,需要实现Excel的导入导出功能,对于Web架构的Excel导入导出功能,比较传统的实现方式是: 1)导入Excel:将Excel文件上传到服务器的某一文件夹下,然后在服务端完成E ...
- 分享一个前辈的NPOIhelper
即拿即用: 首先要下载npoi的dll,此不赘述,接着添加引用: using NPOI.HPSF; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel ...
- 利用npoi导出Excel
npoi库是当下最流行的处理Excel.Word.PPT等Office文件格式 npoi的下载地址:http://npoi.codeplex.com/ npoi的官方学习地址: http://www. ...
随机推荐
- 让DIV实现抖动效果!
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- MySQL主从数据库同步
更新中,还未测试.......
- [Jquery]tab页面切换效果
思路:取得头部和内容的div,头部当前点击的高亮,其余的去除高亮,并通过index()方法获得当前点击的索引,然后内容div通过.eq(index)显示和隐藏 优化:当前做法,从第一个快速移到最后一个 ...
- hdu 4622 Reincarnation
http://acm.hdu.edu.cn/showproblem.php?pid=4622 用字典树把每一个字符串对应成一个整数 相同的字符串对应到相同的整数上 把所用的串对应的整数放在一个数组里 ...
- [vijos P1014] 旅行商简化版
昨天早上上课讲旅行商问题,有点难,这周抽空把3^n的算法码码看.不过这个简化版已经够折腾人了. 其一不看解析不知道这是双进程动态规划,不过我看的解析停留在f[i,j]表示第一个人走到i.第二个人走到j ...
- 百胜集团李磊:BPM实现业务流程全过程无缝链接
作为全球最大的餐饮企业之一,百胜集团在形成规模化连锁经营效应的同时,战略地利用信息化手段,强化管理和运营水平,打造企业的核心竞争力.通过流程梳理,百胜集团实现了以规模化.规范化.信息化和现代化为主题的 ...
- tornado介绍
一.定义 tornado是一个异步非阻塞模型的服务器(tcp/http).web框架. 二.特性 1.高并发 原因:其一,网络事件循环部分根据操作系统选择最高效的,如Linux会是epoll: 其二, ...
- JVM-类文件结构
无关性的基石 I> "平台无关性"实现在操作系统的应用层上:sun公司以及其他虚拟机提供商发布了许多可以运行在各种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关 ...
- SqlServer DateDiff函数 比较时间 (转)
DateDiff函数 是一个非常有用的函数,它可以为一些网页做一些特殊的效果. 我就曾用到它和一张'new'字样的图片 来区别网页显示的信息是否为最近的信息.例如:提示最近的通知,最近的新闻等等 ...
- 有关PHP安装,基础学习
首先要安装 wamp 和 NavicatMySQLFront (要在非中文目录下) 打开DW 点击站点 ——新建站点:设置站点名称,选择本地站点文件夹:wap\www 服务器:添加 + 服务器名 ...