- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章jxl 导出数据到excel的实例讲解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
优点:
Jxl对中文支持非常好,操作简单,方法看名知意.
Jxl是纯javaAPI,在跨平台上表现的非常完美,代码可以再windows或者Linux上运行而无需重新编写 。
支持Excel 95-2000的所有版本(网上说目前可以支持Excel2007了,还没有尝试过) 。
生成Excel 2000标准格式 。
支持字体、数字、日期操作 。
能够修饰单元格属性 。
支持图像和图表,但是这套API对图形和图表的支持很有限,而且仅仅识别PNG格式.
缺点:
效率低,图片支持不完善,对格式的支持不如POI强大 。
案例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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("导出文件出错");
- }
- }
原文链接:http://www.cnblogs.com/learnapi/p/8027947.html 。
最后此篇关于jxl 导出数据到excel的实例讲解的文章就讲到这里了,如果你想了解更多关于jxl 导出数据到excel的实例讲解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
是否可以调整此代码以导出foreach循环外的所有行: 这工作正常(内部循环): $vms = Get-VM | Where { $_.State –eq ‘Running’ } | Select-
我试图将我的 bundle.js 引入我的 Node 服务器,但显然 webpack 包在顶部的所有包代码之前缺少一个 module.exports =。 我可以手动将 module.exports
我有一个 android 项目,其中包含一个库项目。在这个库项目中,我包含了许多可绘制对象和动画。 问题是,当我将主项目导出为 .apk 时,它包括所有可绘制对象和动画,甚至是主项目中未使用的对象。
我的一个 mysql 用户以这种方式耗尽了他的生产数据库: 他将所有数据导出到转储文件,然后删除所有内容,然后将数据导入回数据库。他从 Innodb 大表空间中保存了一些 Gig(我不知道他为什么这样
我正在 pimcore 中创建一个新站点。有没有办法导出/导入 pimcore 站点的完整数据,以便我可以导出 xml/csv 格式的 pimcore 数据进行必要的更改,然后将其导入回来? 最佳答案
我有以下静态函数: static inline HandVal StdDeck_StdRules_EVAL_N( StdDeck_CardMask cards, int n
因为我更新了 angular cli 和 nestjs 版本,所以我收到了数百条警告,提示我无法找到我的自定义类型定义和接口(interface)。但是我的nestjs api仍然可以正常工作。 我正
Eclipse 的搜索结果 View 以其树状结构非常方便。有没有办法将这些结果导出为可读的文本格式或将它们保存到文件中以备后用? 我试过使用复制和粘贴,但生成的文本格式远不可读。 最佳答案 不,我认
我想在用户在 Chrome 中打开页面时使用 WebP否则它应该是 png。 我找到了这段代码: var isChrome = !!window.chrome && !!window.chrome.w
您好,我正在尝试根据“上次登录”导出 AD 用户列表 我已经使用基本 powershell 编写了脚本,但是如果有人可以使用“AzureAD 到 Powershell” 命令找到解决方案,我会很感兴趣
有没有办法启用 Stockchart 的导出?我知道这对于普通图表是可行的,但对于股票图表,当尝试启用导出模式时,我得到了未定义, 我尝试过:chart.export.enabled=true;和ch
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我正在尝试学习如何使用命令行将数据导入/导出到 Oracle。根据我的发现,看起来我应该使用 sqlldr.exe 文件来导入和导出,但我不确定除了 userid 之外还需要什么参数。谁能给我解释一下
您好,我正在尝试根据“上次登录”导出 AD 用户列表 我已经使用基本 powershell 编写了脚本,但是如果有人可以使用“AzureAD 到 Powershell” 命令找到解决方案,我会很感兴趣
我想生成一个 PDF,它将以表格格式显示查询集的输出,例如: query = ModelA.objects.filter(p_id=100) class ModelA(models.Model):
我有一个数据库代理,可以从 IBM Notes 数据生成 Word 文档。我正在使用 Java2Word API 来实现此目的,但不幸的是,该 API 几乎没有文档,而且我找不到任何有关表格格式(大小
我尝试将 Java 程序从 Eclipse 导出到 .jar 文件,但遇到了问题。它运行良好,但由于某种原因它没有找到它应该从中获取数据的文本文件。如果有人能帮忙解决这个问题,我将非常感激。 最佳答案
我正在尝试学习如何使用命令行将数据导入/导出到 Oracle。根据我的发现,看起来我应该使用 sqlldr.exe 文件来导入和导出,但我不确定除了 userid 之外还需要什么参数。谁能给我解释一下
使用LLVM / Clang编译到WebAssembly的默认代码生成将导出内存,并完全忽略表。 使用clang(--target=wasm32-unknown-unknown-wasm)定位Web组
我正在尝试在 HSQL 数据库中重新创建一个 oracle 数据库。 这是为了在本地开发人员系统上进行更好的单元测试。 我需要知道的是,是否有任何我可以在 oracle 服务器/客户端中使用的工具/命
我是一名优秀的程序员,十分优秀!