将DataSet对象导出成Excel文档

一、不带格式控制

void btnExport_Click(object sender, EventArgs e)
{
IList<string> fields = new List<string>();
IList<string> headers = new List<string>();
fields.Add("数据库字段名1");
headers.Add("Excel字段名1");
fields.Add("数据库字段名2");
headers.Add("Excel字段名2"); StringBuilder strFlag = new StringBuilder();
foreach (string head in headers)
{
strFlag.Append(head + ",");
if (head == headers[headers.Count - ])
{
strFlag = strFlag.Remove(strFlag.Length - , );
strFlag.Append("\r\n");
}
} DataSet dt = new DataSet();//从数据库获取到数据
if (dt != null && dt.Tables[].Rows.Count > )
{
foreach (DataRow row in dt.Tables[].Rows)
{
foreach (string field in fields)
{
strFlag.Append(row[field]).Append(",");
if (field == fields[headers.Count - ])
{
strFlag = strFlag.Remove(strFlag.Length - , );
strFlag.Append("\r\n");
}
}
} Page.Response.Clear();
Page.Response.Buffer = false;
Page.Response.Charset = "GB2312"; Page.Response.AppendHeader("Content-Disposition", "attachment;filename=Excel文件名.csv");
Page.Response.ContentType = "application/octet-stream"; Page.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Page.EnableViewState = false;
Page.Response.Write(strFlag.ToString());
Page.Response.End();
}
}

简洁版

二、可控制导出格式(是目前.net导出excel最适合的解决方案)

//引用NPOI.dll
//using NPOI.HSSF.UserModel;
//using NPOI.HPSF;
//using NPOI.POIFS.FileSystem;
//using NPOI.SS.UserModel; DataSet dt = new DataSet();//从数据库读取数据; HSSFWorkbook workbook = new HSSFWorkbook(); ISheet sheet1 = workbook.CreateSheet("Sheet1");
workbook.CreateSheet("Sheet2");
workbook.CreateSheet("Sheet3");//一般Excel都有三个Sheet HSSFRow row = (HSSFRow)sheet1.CreateRow();
row.CreateCell().SetCellValue("姓名");
row.CreateCell().SetCellValue("性别");
row.CreateCell().SetCellValue("年龄"); //样式,更多样式见文档
ICellStyle cellStyle_cny = workbook.CreateCellStyle();
IDataFormat format = workbook.CreateDataFormat();
//cellStyle_cny.DataFormat = format.GetFormat("¥#,##0.00;¥-#,##0.00");//价格样式
cellStyle_cny.Alignment = HorizontalAlignment.Center;//左右居中
cellStyle_cny.VerticalAlignment = VerticalAlignment.Center;//上下居中 if (dt != null && dt.Tables[].Rows.Count > )
{
for (int i = ; i < dt.Tables[].Rows.Count; i++)
{
row = (HSSFRow)sheet1.CreateRow(i + ); row.CreateCell().SetCellValue(dt.Tables[].Rows[i]["Name"].ToString());
row.CreateCell().SetCellValue(dt.Tables[].Rows[i]["Sex"].ToString()); row.CreateCell().SetCellValue(Convert.ToInt32(dt.Tables[].Rows[i]["Age"])); row.GetCell().CellStyle = cellStyle_cny;//设置样式
} } //sheet1.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(1,4,2,2)); //合并单元格,将第3列的第二行到第五行合并为一个单元格(下标从0开始) //导出
System.IO.MemoryStream ms = new System.IO.MemoryStream();
workbook.Write(ms);
Page.Response.AddHeader("Content-Disposition", string.Format("attachment; filename=我的消费记录{0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff")));
Page.Response.BinaryWrite(ms.ToArray());
workbook = null;
ms.Close();
ms.Dispose();

导出带样式的Excel

注:

1、NPOI.dll可到官网下载,或网上搜索下载。官网:http://npoi.codeplex.com/

2、关于NPOI是什么,以及相关文档,请浏览:http://blog.csdn.net/pan_junbiao/article/details/39717443

3、导出文件名如果是中文的话会出现乱码的解决方法:

//将中文名转码之后再加入文件头
string filename = HttpUtility.UrlEncode(System.Text.UTF8Encoding.UTF8.GetBytes("文件名.xls"));
Page.Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);

补充第二点,设置所导出的文档的详细信息,就是右击文件--属性--详细信息,所看到的信息

//代码为第二点的代码补充(一些变量在第二点中声明)
DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
dsi.Company = "xx公司";
SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
si.Title = "说明标题1";
si.Subject = "主题1";
si.Comments = "备注1";
workbook.DocumentSummaryInformation = dsi;
workbook.SummaryInformation = si;

设置导出的Excel文档的详细信息

【C#】.net 导出Excel功能的更多相关文章

  1. Atitit.导出excel功能的设计 与解决方案

    Atitit.导出excel功能的设计 与解决方案 1.1. 项目起源于背景1 1.2. Js  jquery方案(推荐)jquery.table2excel1 1.3. 服务器方案2 1.4. 详细 ...

  2. 项目笔记:导出Excel功能

    1.前台这块: var ids=""; $.post("${basePath}/assets/unRegDeviceAction_getDeviceIds.do" ...

  3. 项目笔记:导出Excel功能分sheet页插入数据

    导出Excel功能分sheet页处理数据: /*导出EXCEL*/ public void createExcel() { log.info("导出Excel功能已经启动-BEGIN&quo ...

  4. vue项目导出EXCEL功能

    因为一些原因导出EXCEL功能必须前端来做,所以就研究了一下,在网上也找了一些文章来看,有一些不完整,我做完了就记录下来,供大家参考: 1.首先先安装依赖: npm install file-save ...

  5. Vue通过Blob对象实现导出Excel功能

    不同的项目有不同的导出需求,有些只导出当前所显示结果页面的表格进入excel,这个时候就有很多插件,比如vue-json-excel或者是Blob.js+Export2Excel.js来实现导出Exc ...

  6. dataTables的导出Excel功能

    Datatables它是一款基于jQuery表格插件,钟情于它操作dom的灵活.做后台的同学想必使用它能事半功倍,而且交互强.容易扩展. 我也是最近要做公司后台界面,表格涉及的很多,所以考虑使用DT, ...

  7. layui + mvc + ajax 导出Excel功能

    为了更方便,没基础的伙伴更容易理解,我尽量详细简便 省了很多代码,一步一步的试 自己引入文件 1. html 前端视图代码 Layui的数据绑定 全部代码 @{ Layout = null; } &l ...

  8. asp.net core web的导入导出excel功能

    这里主要记录下asp.net core web页面上进行导入导出excel的操作. 主要是导入,因为现在使用的很多前端框架(例如kendo ui)本身就有导出的功能. 这里使用到EPPlus.Core ...

  9. Django Admin中增加导出Excel功能

    参考: https://www.cnblogs.com/yoyo008/p/9232805.html 在使用Django Admin时, 对于列表我们有时需要提供数据导出功能, 如下图: 在Djang ...

  10. laravel-admin 自定义导出excel功能,并导出图片

    https://www.jianshu.com/p/91975f66427d 最近用laravel-admin在做一个小项目,其中用到了excel导出功能. 但是laravel-admin自带的导出功 ...

随机推荐

  1. 页面渲染——简化paint复杂程度和区域

    Paint是填充像素并且最后合成在用户的屏幕上的过程. 通常是在管道中耗费最大的,你要尽可能的避免使用paint. 动画中使用除了transform和opacity的动画属性都将触发paint pai ...

  2. 三剑客之awk数组实战

    shell数组for循环 第一种: #!/bin/sh array=(1 2 3) for i in ${array[*]}  do    echo $i done   第二种: #!/bin/sh ...

  3. C++之new和delete

    new 和 delete 是 C++ 用于管理 堆内存 的两个运算符,对应于 C 语言中的 malloc 和 free,但是 malloc 和 free 是函数,new 和 delete 是运算符.除 ...

  4. Jasper:API / API 策略和最佳做法

    ylbtech-Jasper:API / API 策略和最佳做法 1.返回顶部 1. API 策略和最佳做法 Cisco Jasper 已经建立了一项 API 公平使用策略,确保所有 Control  ...

  5. Python之线程与GIL

    前言            以下内容是个人学习之后的感悟,转载请注明出处~ 线程是什么 线程是程序中一个单一的顺序控制流程.进程内一个相对独立的.可调度的执行单元,是系统独立调度和分派CPU的 基本单 ...

  6. 20个jQuery分页插件和教程

    1.客户端的jQuery 分页插件jPages jPages 是一个客户端的分页插件,但提供很多特性例如自动翻页.键盘和滚动浏览,延迟显示以及完全可定制的导航面板. Read More Demo 2. ...

  7. git搭建私有仓库

    git gui参考 https://ask.helplib.com/git/post_1004941

  8. 【Hadoop】MapReduce笔记(四):MapReduce优化策略总结

    Cloudera 提供给客户的服务内容之一就是调整和优化MapReduce job执行性能.MapReduce和HDFS组成一个复杂的分布式系统,并且它们运行着各式各样用户的代码,这样导致没有一个快速 ...

  9. Flutter实战视频-移动电商-30.列表页_商品列表UI界面布局

    30.列表页_商品列表UI界面布局 小程序里面的布局方式 小程序的图片上这里使用的是warp布局,因为首页里面火爆专区,已经用过了warp来布局了. 所以这里我们没有必要再讲一遍,这里我们使用List ...

  10. POJ1111【BFS】

    在搜1011的时候误搜了1111,简单BFS吧,多一个X就是多四个面,每次看看他的四个面有多少个重复的,然后剪掉,最后答案加上就好了: code: //#include <bits/stdc++ ...