简单的Excel导出(两种方式)
最近项目里面有个周报Excel导出的功能,为了解决这个问题,我显示调研Excel内核的方式实现了,但是被告知该方法有诸多弊端(1、服务器需要装相应版本的Excel;2、如果程序中途出错服务器会有很多Excel进程);最后用得aspose.cells第三方控件的方式完成。
一、Excel内核方式实现
该方法首先需要添加引用Microsoft.Office.Interop.Excel;然后添加同名的using。具体数据插入的逻辑可以忽略,代码如下
1 /// Excel导出 2 /// </summary> 3 /// <param name="tArys">数据源</param> 4 /// <param name="templetFileName">模板地址</param> 5 /// <param name="reportFileName">导出文件临时地址</param> 6 public static void ExportWeeklyReport(object[] tArys, string templetFileName, string reportFileName) 7 { 8 //模板文件 9 string TempletFileName = templetFileName; 10 //导出文件 11 string ReportFileName = reportFileName; 12 13 string strTempletFile = Path.GetFileName(TempletFileName); 14 //将模板文件复制到输出文件 15 FileInfo mode = new FileInfo(TempletFileName); 16 mode.CopyTo(ReportFileName, true); 17 18 //打开excel 19 object missing = Missing.Value; 20 Application app = null; 21 Workbook wb = null; 22 Worksheet ws = null; 23 Range r = null; 24 // 25 app = new Microsoft.Office.Interop.Excel.Application(); 26 wb = app.Workbooks.Open(ReportFileName, false, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing); 27 app.Visible = true; 28 29 //得到WorkSheet对象 30 ws = (Worksheet)wb.Worksheets.get_Item(2);//2代表第二个sheet 31 32 ////添加或修改WorkSheet里的数据 33 34 //定义一些需要计算的变量 35 int stafforganizedTotal = 0; 36 int staffonguardTotal = 0; 37 int staffontripTotal = 0; 38 int stafftemporaryTotal = 0; 39 string requiredtime = string.Empty; 40 41 ///把数据写到Excel// 42 if (tArys != null) 43 { 44 for (int tis = 0; tis < tArys.Length; tis++) 45 { 46 47 object[,] tAry = (object[,])tArys[tis]; 48 for (int ti = 0; ti < tAry.GetLength(0); ti++) 49 { 50 string name = cls.toString(tAry[ti, 0]); 51 switch (name) 52 { 53 case "stafforganized": 54 stafforganizedTotal += cls.getNum(cls.toString(tAry[ti, 1])); 55 break; 56 case "staffonguard": 57 staffonguardTotal += cls.getNum(cls.toString(tAry[ti, 1])); 58 break; 59 case "staffontrip": 60 staffontripTotal += cls.getNum(cls.toString(tAry[ti, 1])); 61 break; 62 case "stafftemporary": 63 stafftemporaryTotal += cls.getNum(cls.toString(tAry[ti, 1])); 64 break; 65 case "requiredtime": 66 requiredtime = cls.toString(tAry[ti, 1]); 67 break; 68 case "content": 69 ws.Cells[10 + tis, 5] = cls.toString(tAry[ti, 1]); 70 break; 71 case "plan": 72 ws.Cells[25 + tis, 5] = cls.toString(tAry[ti, 1]); 73 break; 74 case "responsibleperson": 75 ws.Cells[25 + tis, 12] = cls.toString(tAry[ti, 1]); 76 break; 77 default: 78 break; 79 } 80 81 } 82 83 } 84 ws.Cells[6, 6] = stafforganizedTotal; 85 ws.Cells[6, 8] = staffonguardTotal; 86 ws.Cells[6, 10] = staffontripTotal; 87 ws.Cells[6, 12] = stafftemporaryTotal; 88 ws.Cells[4, 11] = requiredtime; 89 } 90 91 92 93 //输出Excel文件并退出 94 wb.Save(); 95 wb.Close(null, null, null); 96 app.Workbooks.Close(); 97 app.Application.Quit(); 98 app.Quit(); 99 100 System.Runtime.InteropServices.Marshal.ReleaseComObject(ws); 101 System.Runtime.InteropServices.Marshal.ReleaseComObject(wb); 102 System.Runtime.InteropServices.Marshal.ReleaseComObject(app); 103 104 ws = null; 105 wb = null; 106 app = null; 107 108 109 }
二、aspose.cell方式实现
该方法需要第三方控件的支持,可以在csdn上直接搜索下载,也可以购买。官网上有很多例子,我这个只是最最基础的。具体代码如下。(记得加引用后加using)
1 /// <summary> 2 /// 生成Excel到指定目录 3 /// </summary> 4 /// <param name="tArys"></param> 5 /// <param name="regulardatetext"></param> 6 public static void ExportWeeklyReport(object[] tArys, string templetFileName, string reportFileName) 7 { 8 9 10 /////参考Aspose.Cells官网的例子http://www.aspose.com/demos/.net-components/aspose.cells/csharp/quick-start/data/hello-world.aspx 11 12 //打开excel 13 14 Workbook wb = new Workbook(templetFileName);//打开对应地址的excel模板 15 Worksheet ws = wb.Worksheets[1];//第二个sheet,从0开始 16 Cells cells = ws.Cells;//获取对应的cells 的引用 17 18 ////定义几个需要计算的变量 19 int stafforganizedTotal = 0; 20 int staffonguardTotal = 0; 21 int staffontripTotal = 0; 22 int stafftemporaryTotal = 0; 23 string requiredtime = string.Empty; 24 25 ///把数据写到Excel// 26 if (tArys != null) 27 { 28 for (int tis = 0; tis < tArys.Length; tis++) 29 { 30 31 object[,] tAry = (object[,])tArys[tis]; 32 for (int ti = 0; ti < tAry.GetLength(0); ti++) 33 { 34 string name = cls.toString(tAry[ti, 0]); 35 switch (name) 36 { 37 case "stafforganized": 38 stafforganizedTotal += cls.getNum(cls.toString(tAry[ti, 1])); 39 break; 40 case "staffonguard": 41 staffonguardTotal += cls.getNum(cls.toString(tAry[ti, 1])); 42 break; 43 case "staffontrip": 44 staffontripTotal += cls.getNum(cls.toString(tAry[ti, 1])); 45 break; 46 case "stafftemporary": 47 stafftemporaryTotal += cls.getNum(cls.toString(tAry[ti, 1])); 48 break; 49 case "requiredtime": 50 requiredtime = cls.toString(tAry[ti, 1]); 51 break; 52 case "content": 53 cells[9 + tis, 4].PutValue(cls.toString(tAry[ti, 1]), true); 54 break; 55 case "plan": 56 cells[24 + tis, 4].PutValue(cls.toString(tAry[ti, 1]), true); 57 break; 58 case "responsibleperson": 59 cells[24 + tis, 11].PutValue(cls.toString(tAry[ti, 1]), true); 60 break; 61 default: 62 break; 63 } 64 65 } 66 67 } 68 cells[5, 5].PutValue(stafforganizedTotal); 69 cells[5, 7].PutValue(staffonguardTotal); 70 cells[5, 9].PutValue(staffontripTotal); 71 cells[5, 11].PutValue(stafftemporaryTotal); 72 cells[3, 10].PutValue(requiredtime); 73 74 } 75 76 77 78 79 //保存到相应的路径 80 wb.Save(reportFileName); 81 82 83 84 }
转载于:https://www.cnblogs.com/chuanzhifeng/archive/2012/11/13/2768102.html
简单的Excel导出(两种方式)相关推荐
- java操作Excel有两种方式 方式1:jxl操作Excel jxl的API
java操作Excel有两种方式 方式1:jxl操作Excel 方式2:poi操作Excel 下面介绍jxl API: 使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用 ...
- excel下载两种方式(axios和window.open)
excel下载两种方式 1 第一种 调用window.openmethods:{getDown() {window.open(baseUrl+ "/report/data_excel?cur ...
- 导出excel的两种方式
引言 导出excel就是将后台的数据在数据库中查找出来,然后再将数据存放进excel表格中,这种操作多用于一些统计表中,将table中的数据导出来,存放进excel表格中.(最近在将手机中的短信往电脑 ...
- java导出excel的两种方式
博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏. ...
- Qt导出数据到EXCEL的两种方式
一.导出到csv格式,这种格式不用安装office QString DModel::exportDataToCSV(QString lx) {QString dtStr="d:/" ...
- 【Excel】Java 操作 Excel 的两种方式:POI、EasyExcel
1. 了解 POI 和 EasyExcel Java 中,常见的用来操作 Excel 的方式有 2 种:POI.EasyExcel.主要用于:对 Excel 进行导入.导出. POI:Apache.一 ...
- Java操作Excel的两种方式(详细)
目录 POI操作 03版excel操作 07版操作 公式操作 poi读操作 EasyExcel操作 写操作 读操作 POI操作 poi操作excel分为03版和07版,03版的excel是有长度限制的 ...
- 使用 EasyExcel 读取Excel(两种方式)
转载:https://www.cnblogs.com/oukele/p/11443659.html 引入 jar 包 <dependency><groupId>com.alib ...
- 原生js更改html,原生js更改css样式的两种方式
原生js更改css样式的两种方式 发布时间:2020-08-30 01:46:17 来源:脚本之家 阅读:148 作者:外婆的彭湖湾 下面我给大家介绍的是原生js更改CSS样式的两种方式: 1. 通过 ...
- plsql导出表结构到excel_plsql 将表结构导出到excel中的两种方式
1.情景展示 如何将表结构导出到excel中(不是建表的SQL语句),如何实现? 2.方式一 新建一个SQL窗口,输入要导出结构的表,选中右键-->描述 右键-->导出-->CSV文 ...
最新文章
- oracle rownum分页 出现重复数据
- Ubuntu系统启动错误问题的解决
- python中比较重要的几个函数_Python 几个重要的内置函数 python中的内置函数和关键字需要背过吗...
- C如何将二维数组作为返回值
- 5G 之战让运营商备受冷落?! | 极客头条
- linux下LAMP环境的搭配
- syslog (cactiez)
- linux系统下的打印机驱动下载,用于UNIXLinux系统的打印机驱动程序-Lexmark.PDF
- PCB设计之EMC 47原则
- 多开分身苹果版_【苹果/安卓】影分身,我们每个人都会!
- 解决jest处理es模块
- SEO工作者面试基本都会被问到的问题
- 剑指offer(18) 二叉树的下一个结点
- [WinError 10060]错误
- 工智能是实现教育生态重构的有效手段,将改变教育的时空场景和供给水平
- python爬虫--Scrapy框架--Scrapy+selenium实现动态爬取
- matlab用多个cpu,Matlab 多核 多个CPU 并行运算
- 灰度处理与二值化的关系
- 【疑难解决】EasyCVR通过SDK接入海康NVR通道无法播放,该如何排查?
- S7-200SMART如何组态高速计数器及如何使当前值断电保持?
热门文章
- php8更新,PHP 8 中新特性以及重大调整
- STM32F1笔记(一)GPIO输出
- java url下载ics_使用Microsoft Graph API处理外部(Internet / .ics)日历URL
- 著名开源项目_著名开源项目案例研究
- observable_Java Observable addObserver()方法与示例
- 二元矩阵峰值搜索_好斗的牛(二元搜索)
- c#中重载单目运算符-_C#程序重载二进制运算符(-,*,/)
- Spring三种对象创建方式
- hadoop put命令的格式_HDFS常用命令
- 2016_shengyang_onsite