jxl 导出数据到excel
优点:
- Jxl对中文支持非常好,操作简单,方法看名知意。
- Jxl是纯javaAPI,在跨平台上表现的非常完美,代码可以再windows或者Linux上运行而无需重新编写
- 支持Excel 95-2000的所有版本(网上说目前可以支持Excel2007了,还没有尝试过)
- 生成Excel 2000标准格式
- 支持字体、数字、日期操作
- 能够修饰单元格属性
- 支持图像和图表,但是这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。
缺点:
效率低,图片支持不完善,对格式的支持不如POI强大
案例:
String times = (new SimpleDateFormat("yyyyMMddHHmmss")).format(new Date());
String fname = "系统日志" + times; // 文件名
List<Logs> list=logsService.selectForList(hql.toString());
String path = request.getSession().getServletContext().getRealPath("/")
+ "xls/"
+ (new SimpleDateFormat("yyyyMMdd")).format(new Date());
File file = new File(path);
// 如果文件夹不存在则创建
if (!file.exists() && !file.isDirectory()) {
file.mkdir();
}
response.setContentType("application/vnd.ms-excel;charset=utf-8");// // 指定文件的保存类型。
response.setCharacterEncoding("utf-8");
ExportUtil.writer_log(request,fname, list, response);//下载到本地
writer_log导出方法如下
/**
* 生成 excel 文件,导出到本地电脑
* @param fname 文件名
* @param list 需要打印的数据,即数据库查询的数据列表
*/
public static void writer_log(HttpServletRequest request,String fname, List list, HttpServletResponse response) {
try {
OutputStream os = response.getOutputStream();//取得输出流
response.reset();//清空输出流
// 下面是对中文文件名的处理 开始
response.setCharacterEncoding("UTF-8");//设置相应内容的编码格式
if(isMsBrowser(request))
fname= java.net.URLEncoder.encode(fname ,"UTF-8");
else fname = new String(fname.getBytes("UTF-8"),"ISO-8859-1");
response.setHeader("Content-Disposition","attachment;filename="+fname+".xls");
response.setContentType("application/msexcel;charset=utf-8");//定义输出类型
// 对中文文件名的处理 结束 // 此处的 Workbook 导入的是 import jxl.Workbook;
WritableWorkbook wbook = Workbook.createWorkbook(os); // 建立excel文件
WritableSheet sheet = wbook.createSheet("系统日志", 0); // 工作表名称 CellView cellView = new CellView();
cellView.setAutosize(true); //设置自动大小
sheet.setColumnView(0, 8); //设置单元格宽度,0是列号,8是宽度
sheet.setColumnView(1, 20); //设置单元格宽度,1是列号,20是宽度
sheet.setColumnView(2, 24);
sheet.setColumnView(3, 20);
sheet.setColumnView(4, 30);
sheet.setColumnView(5, 13);
sheet.setColumnView(6, 15);
sheet.setColumnView(7, 32);
sheet.setColumnView(8, 15); // 设置Excel字体
WritableFont wfont = new WritableFont(WritableFont.createFont("宋体"), 22,
WritableFont.BOLD, false,
jxl.format.UnderlineStyle.NO_UNDERLINE,
jxl.format.Colour.BLACK); //设置单元格字体样式
WritableCellFormat titleFormat = new WritableCellFormat(wfont); //添加单元格字体
titleFormat.setAlignment(Alignment.CENTRE); //设置文字居中对齐方式;
String[] title = { "系统日志" };
// 设置Excel表头 开始
for (int i = 0; i < title.length; i++) {
// 此处导入的是 import jxl.write.Label;
Label excelTitle = new Label(i, 0, title[i], titleFormat); //单元格内容
// 参数顺序:开始列,开始行,结束列,结束行
sheet.mergeCells(0, 0, 8, 0); //所在位置,第几行第几列
sheet.addCell(excelTitle); //添加单元格信息
}
// 设置Excel表头 结束
// 第一行,即显示时间,参数:(所在列,所在行,内容)
WritableFont wfonttime = new WritableFont(WritableFont.createFont("宋体"), 11,
WritableFont.NO_BOLD, false,
jxl.format.UnderlineStyle.NO_UNDERLINE,
jxl.format.Colour.BLACK); //设置单元格字体样式
WritableCellFormat titletime = new WritableCellFormat(wfonttime);//添加单元格字体
titletime.setAlignment(Alignment.RIGHT); //设置文字居中对齐方式;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
// sheet.setColumnView(1, cellView); //根据内容自动设置列宽
Label contentDate = new Label(0, 1, df.format(new Date()), titletime); //单元格内容
// sheet.mergeCells(16, 1, 18, 1); //所在位置,第几行第几列,即合并的位置,如没合并,可不写
sheet.addCell(contentDate); //添加单元格信息
// 第一行 结束
// 第二行,显示条件标题栏
WritableFont wfont2 = new WritableFont(WritableFont.createFont("宋体"), 11,
WritableFont.BOLD, false,
jxl.format.UnderlineStyle.NO_UNDERLINE,
jxl.format.Colour.BLACK); //设置单元格字体样式
WritableCellFormat titleFormat2 = new WritableCellFormat(wfont2);//添加单元格字体
titleFormat2.setBorder(Border.ALL, BorderLineStyle.THIN); //设置边框--实线;
titleFormat2.setAlignment(Alignment.CENTRE); //设置文字居中对齐方式;
titleFormat2.setVerticalAlignment(VerticalAlignment.CENTRE); //设置垂直居中;
Label content2a = new Label(0, 2, "序号", titleFormat2); //单元格内容--第1格
Label content2b = new Label(1, 2, "用户名", titleFormat2); //单元格内容--第2格
Label content2c = new Label(2, 2, "记录时间", titleFormat2); //单元格内容--第3格
Label content2d = new Label(3, 2, "操作模块", titleFormat2); //单元格内容--第4格
Label content2e = new Label(4, 2, "操作内容", titleFormat2); //单元格内容--第5格
Label content2f = new Label(5, 2, "操作动作", titleFormat2); //单元格内容--第6格
Label content2g = new Label(6, 2, "操作人IP", titleFormat2); //单元格内容--第7格
Label content2h = new Label(7, 2, "所属组织", titleFormat2); //单元格内容--第8格
Label content2i = new Label(8, 2, "备注", titleFormat2); //单元格内容--第9格
sheet.mergeCells(0, 1, 8, 1);
/*sheet.mergeCells(0, 2, 0, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第1列)
sheet.mergeCells(1, 2, 1, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第2列)
sheet.mergeCells(2, 2, 2, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第3列)
sheet.mergeCells(3, 2, 3, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第4列)
sheet.mergeCells(4, 2, 4, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第5列)
sheet.mergeCells(5, 2, 5, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第6列)
sheet.mergeCells(6, 2, 6, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第7列)
sheet.mergeCells(7, 2, 7, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第8列)
sheet.mergeCells(8, 2, 8, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第9列)
sheet.mergeCells(9, 2, 9, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第10列)
sheet.mergeCells(10, 2, 12, 3); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到4行,第11-13列)
sheet.mergeCells(13, 2, 15, 3); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到4行,第14-16列)
sheet.mergeCells(16, 2, 16, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第17列)
sheet.mergeCells(17, 2, 17, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第18列)
sheet.mergeCells(18, 2, 18, 4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第19列)
*/ sheet.addCell(content2a); //添加第1格单元格信息
sheet.addCell(content2b); //添加第2格单元格信息
sheet.addCell(content2c); //添加第3格单元格信息
sheet.addCell(content2d); //添加第4格单元格信息
sheet.addCell(content2e); //添加第5格单元格信息
sheet.addCell(content2f); //添加第6格单元格信息
sheet.addCell(content2g); //添加第7格单元格信息
sheet.addCell(content2h); //添加第8格单元格信息
sheet.addCell(content2i); //添加第9格单元格信息
WritableFont wf = new WritableFont(WritableFont.createFont("宋体"), 11,
WritableFont.NO_BOLD, false,
jxl.format.UnderlineStyle.NO_UNDERLINE,
jxl.format.Colour.BLACK); //设置单元格字体样式
WritableCellFormat wcf = new WritableCellFormat(wf); //添加单元格字体
wcf.setBorder(Border.ALL, BorderLineStyle.THIN); //设置边框--实线;
wcf.setVerticalAlignment(VerticalAlignment.CENTRE); //设置垂直对齐
wcf.setAlignment(Alignment.CENTRE); //设置文字水平居中对齐方式;
wcf.setWrap(true); //自动换行 WritableFont wf1 = new WritableFont(WritableFont.createFont("宋体"), 11,
WritableFont.NO_BOLD, false,
jxl.format.UnderlineStyle.NO_UNDERLINE,
jxl.format.Colour.BLACK); //设置单元格字体样式
WritableCellFormat wcf1 = new WritableCellFormat(wf1); //添加单元格字体
wcf1.setBorder(Border.LEFT, BorderLineStyle.THIN); //设置边框--实线;
wcf1.setVerticalAlignment(VerticalAlignment.CENTRE); //设置垂直对齐
wcf1.setAlignment(Alignment.CENTRE); //设置文字水平居中对齐方式; // 以下循环数据库获取的信息
int c = 1; // 用于循环时Excel的行号
Iterator it = list.iterator();
while (it.hasNext()) {
Logs tc = (Logs) it.next();
DateFormat dfmt = new SimpleDateFormat("yyyy.MM"); String xh = String.valueOf(c);
if(xh== null){
xh = "";
}
Label content0 = new Label(0, c+2, xh, wcf); //序号 String name = tc.getUserName();
if(name == null){
name = "";
}
Label content1 = new Label(1, c+2, name, wcf); //用户名 String xrPresent = tc.getLogTime();
if(xrPresent == null){
xrPresent = "";
}
Label content2 = new Label(2, c+2, xrPresent, wcf); //记录时间 String czModel = tc.getModel();
if(czModel == null){
czModel = "";
}
Label content3 = new Label(3, c+2, czModel, wcf); //操作模块 String sex = tc.getContent();
if(sex == null){
sex = "";
}
Label content4 = new Label(4, c+2, sex, wcf); //操作内容 String birthday = tc.getOperate();
if(birthday == null){
birthday = "";
}
Label content5 = new Label(5, c+2, birthday, wcf); //操作动作 String nation = tc.getIp();
if(nation == null){
nation = "";
}
Label content6 = new Label(6, c+2, nation, wcf); //操作人IP String origin = tc.getOrgName();
if(origin == null){
origin = "";
}
Label content7 = new Label(7, c+2, origin, wcf); //所属组织 String bPlace = tc.getRemark();
if(bPlace == null){
bPlace = "";
}
Label content8 = new Label(8, c+2, bPlace, wcf); //备注 String abc="";
Label content9 = new Label(9, c+2, abc, wcf1); //备注 sheet.setRowView(c+2, 600); // 设置行高
sheet.setRowView(c+2, 600);
sheet.setRowView(c+2, 600);
sheet.setRowView(c+2, 600);
sheet.setRowView(c+2, 600);
sheet.setRowView(c+2, 600);
sheet.setRowView(c+2, 600);
sheet.setRowView(c+2, 600);
sheet.setRowView(c+2, 600);
sheet.setRowView(c+2, 600);
sheet.mergeCells(0, c+2, 0, c+2); // 合并第一列第c+2行到第一列第c+2行的所有单元格
sheet.mergeCells(1, c+2, 0, c+2); //mergeCells(a,b,c,d) 单元格合并函数
sheet.mergeCells(2, c+2, 0, c+2); //a 单元格的列号
sheet.mergeCells(3, c+2, 0, c+2); //b 单元格的行号
sheet.mergeCells(4, c+2, 0, c+2); //c 从单元格[a,b]起,向下合并到c列
sheet.mergeCells(5, c+2, 0, c+2); //d 从单元格[a,b]起,向下合并到d行
sheet.mergeCells(6, c+2, 0, c+2);
sheet.mergeCells(7, c+2, 0, c+2);
sheet.mergeCells(8, c+2, 0, c+2);
sheet.mergeCells(9, c+2, 0, c+2);
sheet.addCell(content0);
sheet.addCell(content1);
sheet.addCell(content2);
sheet.addCell(content3);
sheet.addCell(content4);
sheet.addCell(content5);
sheet.addCell(content6);
sheet.addCell(content7);
sheet.addCell(content8);
sheet.addCell(content9);
c++;
}
wbook.write(); // 写入文件
wbook.close();
os.close();
} catch (Exception e) {
throw new PaikeException("导出文件出错");
} }
jxl 导出数据到excel的更多相关文章
- 分别使用POI和JXL导出数据到Excel
1.使用POI 引入jar包 <!-- poi HSSF is our port of the Microsoft Excel 97(-2007) file format (BIFF8) to ...
- 用jxl导出数据到excel
需要jxl.jar 测试结果没问题,代码: package com; import java.io.File; import java.io.IOException; import java.util ...
- JXL 读取 Excel java中jxl导出数据到excel的例子 上传文件
2010-10-14 19:17:06 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info 信息: Entferne Dat ...
- Java操作Jxl实现导出数据生成Excel表格数据文件
实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...
- 1.ASP.NET MVC使用EPPlus,导出数据到Excel中
好久没写博客了,今天特地来更新一下,今天我们要学习的是如何导出数据到Excel文件中,这里我使用的是免费开源的Epplus组件. 源代码下载:https://github.com/caofangshe ...
- 导出数据到Excel --使用ExcelReport有感
先看图,这是几个月前用NPOI写的导出数据到Excel,用了上百行代码,而且难控制,导出来也比较难看 excel打开的效果 下面是我用ExcelReport类库导出到Excel的操作 1.首先引用Ex ...
- 使用Open xml 操作Excel系列之二--从data table导出数据到Excel
由于Excel中提供了透视表PivotTable,许多项目都使用它来作为数据分析报表. 在有些情况下,我们需要在Excel中设计好模板,包括数据源表,透视表等, 当数据导入到数据源表时,自动更新透视表 ...
- Dynamics CRM导出数据到Excel
原创地址:http://www.cnblogs.com/jfzhu/p/4276212.html 转载请注明出处 Pivot Table是微软BI的一个重要工具,所以这里讲一下Dynamics CRM ...
- MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult
导出EXCEL方法总结 MVC导出数据到EXCEL的方法有很多种,常见的是: 1.采用EXCEL COM组件来动态生成XLS文件并保存到服务器上,然后转到该文件存放路径即可: 优点:可设置丰富的EXC ...
随机推荐
- 搭建dnsmasq服务器,局域网内部解析
系统:centos6.5 公司内部需求一台dns server,解析内部域名(该域名不需要在公网上解析) 安装了"bind bind-utils"包,配置里设置转发到外部电信dns ...
- java thread 线程锁同步,锁,通信
12.线程同步 当多个线程访问同一个数据时,非常容易出现线程安全问题.这时候就需要用线程同步 Case:银行取钱问题,有以下步骤: A.用户输入账户.密码,系统判断是否登录成功 B.用户输入取款金额 ...
- python3基础入门-知识点简记
1.基础语法 编码.标识符.保留字.注释.行与缩进... 2.变量类型 (1)Python3有6个标准的数据类型: Numbers(数字) 数字数据类型用于存储数值 不可改变的数据类型 可细分为 ...
- Hive 时间日期处理总结
最近用hive比较多,虽然效率低,但是由于都是T+1的业务模式.所以也就不要求太多了,够用就行.其中用的吧比较多就是时间了,由于大数据中很多字段都不是标准的时间类型字段,所以期间涉及了很多的时间日期字 ...
- 微信小程序(一)
开发流程 注册微信小程序并申请微信支付-->制作小程序-->上传并提交审核-->审核通过,小程序上线 开发微信小程序需要准备 企业公众号(被认证)以及申请小程序.微信开发技术.S ...
- Ceph神坑系列
1. 在使用librbd的过程中,发现一个如果ceph集群异常librbd函数不返回的问题,对librbd的源码进行跟踪,发现了rados接口中的rados_mon_op_timeout(how ma ...
- Redis笔记2-发布订阅
发布/订阅"(publish/subscribe)模式可以实现进程间通信,订阅者可以订阅一个或多个频道(channel),而发布者可以向指定的频道发送消息,所有订阅次频道的订阅者都会收到次消 ...
- SELinux一键开启与禁用脚本
SELinux是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统.但是SELinux的并不能与众多服务很好的兼容,有些人会关闭SELinux一了百了.在日常的运 ...
- B+索引、Hash索引、数据类型长度
1.为什么在数据库中要用B树索引而不是Hash索引? Mysql Hash索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这 ...
- 自动化测试(—)Web自动化测试理解
最近几天,由于工作需要接触Web自动化测试,所以我从网上找的资料,学习了解,然后自己总结汇总的随笔,如文章中有不足的地方,请大家多多指教:或者文章内容与他人相似,望见谅. 手工测试跟自动化 ...