本文所需开发文件及其例子下载地址:http://download.csdn.net/detail/tr1912/9597549

众所周知的是我们在日常的开发中少不了的是和数据打交道,这个时候就需要对于数据进行汇总整理,或者是用工具导出方便统计,这个时候就用到了导出到Excel这个功能。

一、插件的选择

导出到Excel有两种方式,一种是用asp.net自带的方法,一种是用第三方的控件来导出,由于浏览器的限制和本地Excel的是否安装的限制,所以,我选择了网上推荐的Nopi控件,这个控件的最大的优点就是可以在任何系统上导出Office 97-2013文件格式,至少能够支持Word, PowerPoint, Excel, Visio的文件,实现了随意导出的结果。

二、导出Excel的实现

首先来看一下不用控件的导出方法代码:

public void CreateExcel(DataSet ds,string typeid,string FileName)  { HttpResponse resp; resp = Page.Response; resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);    string colHeaders= "", ls_item=""; int i=0; //定义表对象与行对像,同时用DataSet对其值进行初始化 DataTable dt=ds.Tables[0]; DataRow[] myRow=dt.Select("");  // typeid=="1"时导出为EXCEL格式文件;typeid=="2"时导出为XML格式文件 if(typeid=="1") { //取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符 for(i=0;i     colHeaders+=dt.Columns[i].Caption.ToString()+"\t"; colHeaders +=dt.Columns[i].Caption.ToString() +"\n";    //向HTTP输出流中写入取得的数据信息 resp.Write(colHeaders);  //逐行处理数据   foreach(DataRow row in myRow) { //在当前行中,逐列获得数据,数据之间以\t分割,结束时加回车符\n for(i=0;i      ls_item +=row[i].ToString() + "\t";      ls_item += row[i].ToString() +"\n"; //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据     resp.Write(ls_item); ls_item=""; } } else { if(typeid=="2") {  //从DataSet中直接导出XML数据并且写到HTTP输出流中 resp.Write(ds.GetXml()); }     } //写缓冲区中的数据到HTTP头文件中 resp.End(); }

大家可以看出来,他们用的都是web上面的对象和方法来临时创建一个字符串的拼接类型的方法,然后用response响应方法接收,最后用.net自带的write方法写出文件。这样做是不是十分的麻烦?

用Nopi之后的代码:

public void NpoiExcel(DataTable dt, string title){NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();NPOI.SS.UserModel.ISheet sheet = book.CreateSheet("Sheet1");    //创建表NPOI.SS.UserModel.IRow headerrow = sheet.CreateRow(0);    //创建行ICellStyle style = book.CreateCellStyle();        //设置样式style.Alignment = HorizontalAlignment.CENTER;style.VerticalAlignment = VerticalAlignment.CENTER;//写表头for (int i = 0; i < dt.Columns.Count; i++){ICell cell = headerrow.CreateCell(i);     //在行上添加格cell.CellStyle = style;if (dt.Columns[i].ColumnName=="cardId"){cell.SetCellValue("卡号");}else if (dt.Columns[i].ColumnName == "ownerName"){cell.SetCellValue("持卡人");}else if (dt.Columns[i].ColumnName == "orderid"){cell.SetCellValue("订单编号");}else if (dt.Columns[i].ColumnName == "totalcost"){cell.SetCellValue("总金额");}else if (dt.Columns[i].ColumnName == "orderTime"){cell.SetCellValue("订餐时间");}}//写数据for (int i = 0; i < dt.Rows.Count; i++){IRow row = sheet.CreateRow(i+1);       //创建行for (int j = 0; j < dt.Columns.Count; j++){ICell cell = row.CreateCell(j);cell.SetCellValue(dt.Rows[i][j].ToString());}}MemoryStream ms = new MemoryStream();book.Write(ms);Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", HttpUtility.UrlEncode(title + "_" + DateTime.Now.ToString("yyyy-MM-dd"), System.Text.Encoding.UTF8)));Response.BinaryWrite(ms.ToArray());Response.End();book = null;ms.Close();ms.Dispose();}

是不是感觉用专用对象进行操作比用web对象操作明白多了,下面我来介绍一下如何用Nopi的控件。

三、Nopi的使用

首先就是对于Nopi的文件支持,如图:

文件可以从最上方下载。

然后就是命名空间的使用:

using System.Data;
using NPOI;
using NPOI.HPSF;
using NPOI.HSSF;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System.IO;

中间的六个就是Nopi自带的引用,然后要加上IO引用用来输出。

1、创建一个Excel表:

HSSFWorkbook wk = new HSSFWorkbook();
//创建一个Sheet
ISheet sheet = wk.CreateSheet("例子");  

2、创建表格

/在第一行创建行
IRow row = sheet.CreateRow(0);
//在第一行的第一列创建单元格
ICell cell = row.CreateCell(0);

3、对表格赋值

cell.SetCellValue("测试");  

值得注意的是,SetCellValue的重载中支持
    bool
    DateTime
    double
    string
    IRichTextString

4、可以选择保存到硬盘上

//打开一个xls文件,如果没有则自行创建,如果存在myxls.xls文件则在创建时不要打开该文件
using (FileStream fs = File.OpenWrite("d:\\excel.xls"))
{  wk.Write(fs);//向打开的这个xls文件中写入并保存。
}  

5、可以选择网页下载

            MemoryStream ms = new MemoryStream();    //存储池book.Write(ms);             //生成文件Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", HttpUtility.UrlEncode(title + "_" + DateTime.Now.ToString("yyyy-MM-dd"), System.Text.Encoding.UTF8)));Response.BinaryWrite(ms.ToArray());      //把文件写入,写入文件名,然后让用户下载Response.End();               //一系列释放资源book = null;ms.Close();ms.Dispose();

注:亲们注意到了,在两种输出方式中除了调用的系统资源外,系统没有释放Nopi的资源,这个是因为Nopi自带资源释放的功能,能够有效的提高使用的效果。

四、总结

经过这段时间的学习,发现了Excel的导出和C/S版的程序差别还是很大的,在某些方面也强大了不少,而大体的思路确实不变的,我们实现功能的时候一定要理清楚思路在行动。

【web开发】导出到Excel表格相关推荐

  1. 阿里开源(EasyExcel):使用Java将数据导出为Excel表格、带样式----》java web下载 Excel文件

    目录 一.技术选型 二.实现过程 1.导入依赖 2.编写工具类 EasyExcelUtil 3.公用参数类 EasyExcelParams 4.表格样式实体类 MyWriteHandler 5.数据实 ...

  2. 基于macd、kdj、ma技术指标分析股票多空方向——应用开发6 导出到EXCEL表格

    接上一节,我们获得了分析结果 result_df 与图片,现在把结果导出为excel表格 导出表格 代码如下 #建立book writer = pd.ExcelWriter('分析结果.xlsx',e ...

  3. 使用NPOI——C#和WEB API导出到Excel

    目录 介绍 在我们开始旅程之前 背景 使用代码 下载示例 - 650.6 KB 介绍 本文将引导您完成通用导出到Excel功能,该功能经过试用和测试,在WEB API中使用C#并使用NPOI. 本文特 ...

  4. List集合导出成Excel表格

    需要的jar包:poi-3.14.jar List集合导出成Excel表格 实体类 package job.util;/*** * @className Employee* @deprecated 导 ...

  5. POI导出读取Excel表格讲解

    文章目录 一.POI是什么? Apache POI介绍 EasyExcel介绍 二.常用信息 三.导出Excel表具体操作 1.POI-Excel写 2.大文件写数据 3.大文件写SXSSF 四.读E ...

  6. 表格导出计算机,电脑怎么导出excel表格数据-如何将百度指数数据导出到Excel表格...

    系统没有导出功能,电脑表格里的数据有什么方法拿... 将网页表格数据导入到Excel中的方法: 第一步,将包括所需表格的网页打开,并按CTRL C把网址复制到剪贴板,以备下一步使用. 第二步,打开运行 ...

  7. 2021-08-01数据导出到Excel表格

    数据导出到Excel表格 https://www.cnblogs.com/zhangzhiyong-/p/13376527.html package com.jxmcloud.business.sho ...

  8. 将数据库查询结果导出成Excel表格

    使用Java代码,从数据库中获取结果集,将结果集导出成Excel表格形式. 从数据库中查询学生表所有数据,将其导出成Excel表格,点击查看学生表表结构 . package com.test.test ...

  9. 百度指数常见php框架,怎么导出数据到excel表格-如何将百度指数数据导出到Excel表格...

    如何将百度指数数据导出到Excel表格 第一步:打开CAD.CAD命令行输入"Li"."选择对象"选需要提取坐标的多段线.回车. 第二步:将CAD文本框中的数据 ...

  10. php怎么将表格导出到excel表格,php怎么将excel表格数据-php 怎么把数据导出到excel表格...

    如何使用php实现将数据从excel表导入到mysql中? /** * @param array $data //二维数组 不是对象 * @param string $filename //导件 */ ...

最新文章

  1. makefile .phony targets
  2. 将项目依赖也打到jar包中
  3. Vue 过渡效果的组件
  4. 【面试】彻底理解 IO多路复用
  5. aba问题mysql_面试题总结:可能是全网最好的MySQL重要知识点
  6. 如何用python画饼图_Python中的五颜六色的饼状图!(一)
  7. 菜刀php教程,Weevely(php菜刀)工具使用详解
  8. java datastream
  9. 学习 WebService 第五步:在Local创建测试用WebService(WSDL)
  10. J2EE 各种关系逻辑图
  11. TI DSP 28335 自学之路,到此止步
  12. 《Flash MX培训教程》前言
  13. python 做网站的工具_程序员最爱的网站克隆爬取工具- HTTrack
  14. 数据恢复国赛经验与方法分享(电子产品芯片级检测维修与数据恢复赛项)
  15. 高效率的网站打开速度优化方法
  16. 产品数据管理系统框架与信息安全
  17. 金标股份冲刺A股上市:计划募资约6亿元,许光荣为董事长
  18. python爬取百度迁徙动态图_爬取动态图片—以百度图片为例
  19. 如何安装Dev-C++(Dev-C++软件下载及安装教程)
  20. 自己写一个composers包【一】

热门文章

  1. Jzoj5422 天才绅士少女助手克里斯蒂娜
  2. 光流金字塔 matlab,【matlab】光流法
  3. java.lang.SecurityException: Unsupported path
  4. ios 请在设置中打开相机权限_开启运动与健身权限 iOS10相机相册等权限的使用、检测并引导用户开启权限 - 非主流娱乐网...
  5. RabbitMQ和Spring Cache冲突问题解决
  6. 关闭水狐浏览器缓存设置
  7. 位运算的一些有用的操作
  8. openmp matlab,openmp和mex问题
  9. 高级c++招聘,针对性学习扩展,发现不足
  10. “2017小云社群APP年度评选”全民票选正式开启!