通过Workbook类 生成Excel导出数据
需求:
实现错误信息生成Excel保存到本地让用户查看。
刚开始使用了微软自带的Microsoft.Office.Interop.Excel类库、
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
excel.Visible = true;
//新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错
excel.Application.Workbooks.Add(true);
//生成Excel中列头名称
excel.Cells[, ] = "姓名";
excel.Cells[, ] = "工号";
excel.Cells[, ] = "公司";
excel.Cells[, ] = "部门";
excel.Cells[, ] = "失败原因"; //把newdt当前页的数据保存在Excel中
for (int i = ; i < newdt.Rows.Count; i++)
{
excel.Cells[i + , ] = "'" + newdt.Rows[i]["Emp_Name"];
excel.Cells[i + , ] = "'" + newdt.Rows[i]["Emp_Code"];
excel.Cells[i + , ] = "'" + newdt.Rows[i]["CompanyName"];
excel.Cells[i + , ] = "'" + newdt.Rows[i]["DeptName"];
excel.Cells[i + , ] = "'" + newdt.Rows[i]["Error"];
}
//设置禁止弹出保存和覆盖的询问提示框
excel.DisplayAlerts = false;
excel.AlertBeforeOverwriting = false;
//保存工作簿
excel.Application.Workbooks.Add(true).Save();
//保存excel文件
excel.Save("D:" + "\\错误信息.xls");
//确保Excel进程关闭
excel.Quit();
excel = null;
虽然功能实现了、但是由于服务器上没有安装Excel、无法调用COM+组件。
并且COM+组件 听说如果导出过程中出问题可能导致服务器宕机。
经过查阅,修改为调用Aspose.Cells组件。
/// <summary>
/// 导出数据到本地
/// </summary>
/// <param name="dt">要导出的数据</param>
/// <param name="Name">标题</param>
/// <param name="path">保存路径</param>
public void OutFileToDisk(DataTable dt, string Name, string path)
{
Workbook workbook = new Workbook();
/* 工作簿 */
Worksheet sheet = workbook.Worksheets[]; /* 工作表 */
Cells cells = sheet.Cells; /* 单元格 //为标题设置样式 */
Style styleTitle = workbook.Styles[workbook.Styles.Add()]; /* 新增样式 */
Style style2 = workbook.Styles[workbook.Styles.Add()]; /* 新增样式 */
style2.HorizontalAlignment = TextAlignmentType.Center; /* 文字居中 */
style2.Font.Name = "宋体"; /* 文字字体 */
style2.Font.Size = ; /* 文字大小 */
style2.Font.IsBold = true; /* 粗体 */
style2.IsTextWrapped = true; /* 单元格内容自动换行 */
style2.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;
style2.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin;
style2.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;
style2.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin; /* 样式3 */
Style style3 = workbook.Styles[workbook.Styles.Add()]; /* 新增样式 */
style3.HorizontalAlignment = TextAlignmentType.Center; /* 文字居中 */
style3.Font.Name = "宋体"; /* 文字字体 */
style3.Font.Size = ; /* 文字大小 */
style3.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;
style3.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin;
style3.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;
style3.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;
int Colnum = dt.Columns.Count; /* 表格列数 */
int Rownum = dt.Rows.Count;
/* 生成行2 列名行 */
for (int i = ; i < Colnum; i++)
{
cells[, i].PutValue(dt.Columns[i].ColumnName);
cells[, i].SetStyle(style2);
cells.SetRowHeight(, );
cells.SetColumnWidth(i, );
}
/* 生成数据行 */
for (int i = ; i < Rownum; i++)
{
for (int k = ; k < Colnum; k++)
{
cells[ + i, k].PutValue(dt.Rows[i][k].ToString());
cells[ + i, k].SetStyle(style3);
}
cells.SetRowHeight( + i, );
}
//workbook.Save(path);//可以通过Save直接存储
MemoryStream ms = workbook.SaveToStream();
byte[] bt = ms.ToArray();
string fileName = Name + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xls";//客户端保存的文件名
//以字符流的形式下载文件
Response.ContentType = "application/vnd.ms-excel";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.BinaryWrite(bt);
Response.Flush();
Response.End();
}
分享供大家学习、
通过Workbook类 生成Excel导出数据的更多相关文章
- Java操作Jxl实现导出数据生成Excel表格数据文件
实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...
- Excel向数据库插入数据和数据库向Excel导出数据
为了熟悉java里工作簿的相关知识点,所以找了“Excel向数据库插入数据和数据库向Excel导出数据”的功能来实现. 注意事项:1,mysql数据库: 2,需要导入的jar包有 jxl.jar,my ...
- vue2 Excel导出数据 js-xlsx的使用
vue2 Excel导出数据 js-xlsx的使用 https://www.jianshu.com/p/ea115a8e9107 小世界最温暖 关注 2018.11.19 16:08 字数 280 阅 ...
- 使用POI导出EXCEL工具类并解决导出数据量大的问题
POI导出工具类 工作中常常会遇到一些图表需要导出的功能,在这里自己写了一个工具类方便以后使用(使用POI实现). 项目依赖 <dependency> <groupId>org ...
- extjs4 前台导出grid数据 生成excel,数据量大后台无法接收到数据
最近做的一个web项目使用的是extsj4 框架,需要一个导出excel功能,通过extjs4 自带的导出方法实现.在前台生成excel的代码,form提交传递到后台输出.前台grid数据超过1000 ...
- JAVA实现Excel导出数据(以写好的Excel模版导出)
工作中经常会有将后台数据以Excel导出的功能. 简单的方法有将response的contentType设置为application/vnd.ms-excel: 或在JSP页面直接设置成: <% ...
- Java常用工具类之Excel导出
package com.wazn.learn.util; import java.util.List; import java.util.Map; import org.apache.poi.hssf ...
- Excel导出数据Excel.Application组件权限设置方法
很多网络应用系统都会涉及到数据采用Excel方式导出的模块,部分朋友问我到底怎么弄,其实方式很多种,目前比较优秀的方式还是直接用Excel的Excel.Application方式比较合适. 采用Exc ...
- asp.net 生成 excel导出保存时, 解决迅雷下载aspx页面问题
网络上搜索,一大堆废话,以下为简单的导出生成Excel代码: string excelFile = Server.MapPath("~/SB/UpFile/20151104111008/Bo ...
随机推荐
- 宿主进程 vshost.exe
Hosting Process (vshost.exe) 宿主进程是VS的一个特性.可以提高调试的性能,可以进行部分信任调试(partial trust debugging),可以进行设计时表达式计算 ...
- 解决OpenCV Error:Insufficient memory(Failed to allocate 1244164 bytes) in unknown function
从师兄那拷贝过来的代码,师兄的机器上可以运行,环境为Win7+OpenCV231,编译器为Debug Win32,拷贝到自己机器上运行时出现问题. 本机的运行环境为win10+OpenCV244,编译 ...
- struts2中的json
这里放一个转载的struts2中json的详细应用和范例, http://yshjava.iteye.com/blog/1333104,这是个人在网上看到的很用心也很详细的一份关于struts2中js ...
- 初学XPath,其实很简单
XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. (我的理解:XPath 就是一个用来查找xml节点的路径语言,一个路径字符串语法) XM ...
- win10中android studio中的terminal不能输入
1 打开CMD窗口右击 2 3 重启电脑,你试试就知道了.
- android studio简易了解第一部分
1.如果还没下载 jdk,先把jdk下载,然后下载android studio 安装 百度 android studio ,百度软件中心可以下载. Android官网可以下载: 网址: htt ...
- 关于Hadoop结合RDBMS应用的一些思考
最近一段时间一直在从事和hadoop相关的工作,主要是技术内容学习.安装配置优化以及一些框架结构的设计.在此期间,我对于RDBMS和Hadoop的结合应用有了一些自己的看法,写出来大家共同探讨一下. ...
- 如何让OpenSSL得到JKS格式的keystore中的public and private key
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- cocos2d-x 纹理深入研究
转自:http://blog.csdn.net/qq51931373/article/details/9152227 1.纹理控制. 看此代码: CCSprite *pSprite = CCSprit ...
- Jfinal极速开发微信系列教程(一)--------------Jfinal_weixin demo的使用分析
概述: Jfinal_weixin已经出了有好一段时间了!一直在关注当中......最近工作上有需要到这个东西,所以,话了两个小时来看看这个东西,看完demo以后,豁然开朗,原理微信和一般的web项目 ...