通过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 ...
随机推荐
- 【hdu3065】病毒侵袭持续中
题意: 求目标串中每个模式串出现几次 目标串长度<=2000000 模式串<=1000个 模式串长度<=50 题解: 这不就是AC自动机的模板题吗! 求fail树中模式串的子树中有几 ...
- BNUOJ-29365 Join in tasks 简单数学
题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=29365 首先排序,然后维护一个后缀,等差求下和就可以了.. //STATUS:C++_AC ...
- A Tour of Go Exercise: HTTP Handlers
Implement the following types and define ServeHTTP methods on them. Register them to handle specific ...
- 偶遇mysql外键不好使
原来是创建表时选择的类型不一样,应该是innoDB,而且关联的主表类型也必须是innoDB
- MAC 终端 显示隐藏文件 关闭显示隐藏文件
1.显示隐藏文件夹显示:defaults write com.apple.finder AppleShowAllFiles -bool true (1)复制“defaults write com.ap ...
- SQL 存储过程(学生,课程表,选修表)
SQL 存储过程(学生,课程表,选修表) 一.存储过程的分类 在SQL Server中存储过程分过两类: 1)系统存储过程("sp_"作为前缀) 2)用户自定义存储过程 二.创建和 ...
- spring aop 的一个demo(未完,待完善)
假设我们有这样的一个场景 : 对于一个类的众多方法,有些方法需要从缓存读取数据,有些则需要直接从数据库读取数据.怎样实现呢? 实现方案有多种.下面我说下常见的几种实现方案 : 1.直接采用spring ...
- 【转载】如何将Emmet安装到到 Sublime text 3?
http://www.cnblogs.com/tinyphp/p/3217457.html 看清楚哦~~这是Sublime text 3不是2的版本,两者的安装还是有区别的,下面的方法是我感觉比较简单 ...
- 【转】suid sgid 详解
转自:http://www.cnblogs.com/fhefh/archive/2011/09/20/2182155.html 如果你对SUID.SGID仍有迷惑可以好好参考一下! Copyright ...
- git 回退和删除操作
今天不小心把分支的commit提交到master上了.衰 主要通过下面几个命令解决了,很简单记录一下. git reset –hard 回退到某一个版本git push origin :xxxx ...