第一次用C#,用C#写一个批量导出Excel功能

1.引用NPOI资源包,有两种方法,可以在VS中直接安装,也可以下载NPOI.DLL文件添加引用

我用的第一种方法,相对来说比较方便

(1).右击解决方案——>管理解决方案的NuGet程序包

选择需要用到NPOI项目勾选上并点击安装

(2).使用NPOI导出

这个批量导出的功能是把数据库中数据导出到浏览器下载的位置

由于是Ajax请求批量导出接口,所以不能直接导出到浏览器下载

我是先把文件导出到本地,成功后访问下载导出到本地的Excel接口

异步请求代码:

$.ajax({url: "/KtdocPrescription/BatchExport.ajax",data: { "orgAreaId": orgAreaId, "orgCode": orgCode, "RecordTimef": RecordTimef, "RecordTimet": RecordTimet, "presSource": presSource },dataType: "json",asycn: false,type: "post",success: function (data) {mini.unmask(document.body);if (data.data == "out") {mini.alert("数据超过50000条,导出失败!请重新输入搜索条件");} else if (data.data == "fail") {mini.alert("导出失败!");} else {mini.alert("导出成功!");location.href = "/KtdocPrescription/DownloadExcel.ajax?path=" + data.data;}},error: function (data) {mini.unmask(document.body);mini.alert("系统异常!");}});

批量导出代码:

            //查询数据库返回数据列表列表DataTable dataTable = (DataTable)dtFilled;//限制不能超过50000行,插入到Excel可能会内存溢出if (dataTable.Rows.Count > 50000){return "out";}//创建一个空表DataTable dt = new DataTable("处方信息统计");//1.创建空行//DataRow dr = dt.NewRow();DataColumn dc1 = new DataColumn();dc1.ColumnName = "序号";dc1.DataType = typeof(int);DataColumn dc2 = new DataColumn();dc2.ColumnName = "医院名称";dc2.DataType = typeof(string);dt.Columns.Add(dc1);dt.Columns.Add(dc2);for (int i = 0; i < dataTable.Rows.Count; i++){try{DataRow dr = dt.NewRow();dt.Rows.Add(dataTable.Rows[i][0].ToString(), dataTable.Rows[i]["ORG_NAME"].ToString());//Add里面参数的数据顺序要和dt中的列的顺序对应}catch (Exception e){Logger.WriteError(e);}}//设置导出文件路径,临时存放文件string path = HttpRuntime.AppDomainAppPath.ToString();//设置新建文件路径及名称string savePath = path + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + "ktdocPrescription.xls";bool flag = ExportExcelUtil.TableToExcel(dt, savePath);if (flag == true){savePath = HttpUtility.UrlEncode(savePath);return savePath;}else{return "fail";}

ExportExcelUtil工具类代码

public class ExportExcelUtil{/// <summary>/// Datable导出成Excel/// </summary>/// <param name="dt"></param>/// <param name="file">导出路径(包括文件名与扩展名)</param>public static bool TableToExcel(DataTable dt, string file){IWorkbook workbook;string fileExt = Path.GetExtension(file).ToLower();if (fileExt == ".xlsx") { workbook = new XSSFWorkbook(); } else if (fileExt == ".xls") { workbook = new HSSFWorkbook(); } else { workbook = null; }if (workbook == null) { return false; }ISheet sheet = string.IsNullOrEmpty(dt.TableName) ? workbook.CreateSheet("Sheet1") : workbook.CreateSheet(dt.TableName);//表头  IRow row = sheet.CreateRow(0);for (int i = 0; i < dt.Columns.Count; i++){ICell cell = row.CreateCell(i);cell.SetCellValue(dt.Columns[i].ColumnName);if(i != 0){//从第二列开始,设置列宽为20个字符sheet.SetColumnWidth(i, 20 * 256);}}//数据  for (int i = 0; i < dt.Rows.Count; i++){IRow row1 = sheet.CreateRow(i + 1);for (int j = 0; j < dt.Columns.Count; j++){ICell cell = row1.CreateCell(j);cell.SetCellValue(dt.Rows[i][j].ToString());}}//转为字节数组  MemoryStream stream = new MemoryStream();workbook.Write(stream);var buf = stream.ToArray();//保存为Excel文件  try{using (FileStream fs = new FileStream(file, FileMode.Create, FileAccess.Write)){fs.Write(buf, 0, buf.Length);fs.Flush();fs.Close();fs.Dispose();}}catch(Exception e){Logger.WriteError(e);return false;}//创建一个 IO 流MemoryStream ms = new MemoryStream();//写入到流workbook.Write(ms);//转换为字节数组byte[] bytes = ms.ToArray();//还可以调用下面的方法,把流输出到浏览器下载//OutputClient(bytes);//释放资源bytes = null;ms.Close();ms.Dispose();workbook.Close();sheet = null;workbook = null;return true;}public static void OutputClient(string path, string fileName){            if (!string.IsNullOrEmpty(path)){//以字符流的形式下载文件FileStream fs = new FileStream(path, FileMode.Open);byte[] bytes = new byte[(int)fs.Length];fs.Read(bytes, 0, bytes.Length);fs.Close();HttpContext.Current.Response.ContentType = "application/octet-stream";//通知浏览器下载文件而不是打开HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));HttpContext.Current.Response.BinaryWrite(bytes);HttpContext.Current.Response.Flush();//HttpContext.Current.Response.End();HttpContext.Current.Response.Close();FileAttributes attr = File.GetAttributes(path);if (attr == FileAttributes.Directory){Directory.Delete(path, true);}else{File.Delete(path);}}}/// <summary>/// 获取单元格类型/// </summary>/// <param name="cell"></param>/// <returns></returns>private static object GetValueType(ICell cell){if (cell == null)return null;switch (cell.CellType){case CellType.Blank: //BLANK:  return null;case CellType.Boolean: //BOOLEAN:  return cell.BooleanCellValue;case CellType.Numeric: //NUMERIC:  return cell.NumericCellValue;case CellType.String: //STRING:  return cell.StringCellValue;case CellType.Error: //ERROR:  return cell.ErrorCellValue;case CellType.Formula: //FORMULA:  default:return "=" + cell.CellFormula;}}}

下载刚刚导出的Excel文件

public void DownloadExcel(String path){string fileName = "信息表.xls";ExportExcelUtil.OutputClient(path, fileName);}

在调用的OutputClient方法中提供输出到浏览器下载并删除本地文件。

完!

C# 使用NPOI批量导出相关推荐

  1. c#使用NPOI批量导出数据到excel表格里

    背景 我之前是做的Java开发的相关工作,c#开发还是第一次. 公司有这个需求,只好研究一下了. 我接手的是别人开发过两个报表的小玩意,万事开头难,刚开始为了搞清楚这些代码的意思走了不少弯路,下面说说 ...

  2. C# NPOI 批量导出Excel 打包下载

    public void NopiPack()         {             //下载             int colCount = 43;//列数             Res ...

  3. 使用NPOI导入导出标准Excel

    使用NPOI导入导出标准Excel 转自http://www.cnblogs.com/lwme/archive/2011/11/18/npoi_excel_import_export.html 试过很 ...

  4. Npoi html导入到excel,.net mvc 利用NPOI导入导出excel

    因近期项目做到,所以记录一下: 1.导出Excel: 首先引用NPOI包,从这里下载>download (Action一定要用FileResult) /// /// 批量导出需要导出的列表 // ...

  5. mvc npoi导出excel ajax,ASP.Net MVC利用NPOI导入导出Excel

    因近期项目遇到所以记录一下: 首先导出Excel: 首先引用NPOI包 http://pan.baidu.com/s/1i3Fosux (Action一定要用FileResult) /// /// 批 ...

  6. php批量导出pdf文件大小,php完美导出pdf,pdf合并批量导出

    使用到的工具 pdftk      https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/      pdf合并工具 wkhtmltopdf      ...

  7. PHP 利用PHPExcel类库批量导出数据

    2019独角兽企业重金招聘Python工程师标准>>> 之前做健康档案系统时,有一个将统计的数据批量导出到Excel的需求,后来实现后就没怎么做记录,最近一个小伙伴问我这块的问题,我 ...

  8. Oracle批量导出AWR报告

    Oracle批量导出AWR报告 工作需求:项目中需要把生产库中所有的AWR报告dump出来,然后导入到方便测试的数据库中.在测试库中的AWR报告需要根据dbid和实例名逐个导出,如果遇到很多再加上RA ...

  9. npoi的mvc怎么ajax导出,asp.net mvc利用NPOI导入导出Excel解决方法

    asp.net mvc利用NPOI导入导出Excel 导出Excel 2003没有问题,导出Excel2007老是出现无法访问已关闭的流,请帮忙解决,或是哪位有mvc导入导出excel的工具类能提供, ...

最新文章

  1. linux七大功能,值得Linux向其他系统借鉴的七大功能特性
  2. OpenCASCADE:形状愈合之用于修复、分析和升级的辅助工具
  3. Linux查找命令find、loacte、whereis、which、type梳理
  4. Spring中IOC和DI的概念
  5. 想要组装一台 RISC-V PC?试试这个 RISC-V 开发板
  6. 黑马vue实战项目-(一)项目初始化登录功能开发
  7. php留言板系统制作,php制作留言板讲解
  8. java poi dataformat_poi的data format可真不怎么样
  9. rpg人物制作软件_RPG Maker系列最新版本《RPG制作大师MZ》上架Steam
  10. SSM员工工资管理系统(Java毕设项目)
  11. Unity学习笔记------用Unity2D制作打地鼠游戏
  12. Gradle项目在IDEA中运行时提示:Unnecessarily replacing a task that does not exist is not supported. Use create
  13. 网站服务器带宽2m怎么样,云服务器带宽2m够用吗
  14. linux内核不能识别u盘分区,一种在Linux内核中识别特定USB大容量存储设备的方法及系统与流程...
  15. 苹果新款MacBook Pro可能会有SD卡插槽
  16. JBOSS EAP 6 系列七 JPA/hibernate
  17. 创新PC应用、打通云端体验,360小程序引发SaaS软件变革
  18. pink老师JavaScript视频教程笔记
  19. python 比较三个数的最大值,不考虑相等的情况
  20. 爱心点击特效php代码,网页点击特效 - 鼠标点击浮现爱心特效

热门文章

  1. 7-4 王小二分饼 (15分) __C++
  2. 网页过滤 不文明词汇_网页设计词汇:什么是“负担”?
  3. WEB 2.0 字体
  4. 华为鸿蒙收到短信了,王成录接受《深网》采访,华为鸿蒙手机版最新消息出现...
  5. imap与pop3的区别
  6. DFRobot柔性非接触式液位传感器的工作原理和应用领域
  7. python开发erp系统odoo_开源erp软件odoo在线开发环境部署实录
  8. “技术男”升为“管理者”,角色一定要转变,有好方法吗?
  9. 小猿日记(14)- 阿里云ACE是什么
  10. IGBT与MOS管的区别,IGBT与可控硅的区别,IGBT驱动电路设计