jxl 导出数据到excel的实例讲解
发布时间:2020-12-14 20:21:17 所属栏目:Java 来源:网络整理
导读:优点: Jxl对中文支持非常好,操作简单,方法看名知意。 Jxl是纯javaAPI,在跨平台上表现的非常完美,代码可以再windows或者Linux上运行而无需重新编写 支持Excel 95-2000的所有版本(网上说目前可以支持Excel2007了,还没有尝试过) 生成Excel 2000标准格式
优点: 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,title[i],titleFormat); //单元格内容 // 参数顺序:开始列,开始行,结束列,结束行 sheet.mergeCells(0,8,0); //所在位置,第几行第几列 sheet.addCell(excelTitle); //添加单元格信息 } // 设置Excel表头 结束 // 第一行,即显示时间,参数:(所在列,所在行,内容) WritableFont wfonttime = new WritableFont(WritableFont.createFont("宋体"),11,WritableFont.NO_BOLD,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,18,1); //所在位置,第几行第几列,即合并的位置,如没合并,可不写 sheet.addCell(contentDate); //添加单元格信息 // 第一行 结束 // 第二行,显示条件标题栏 WritableFont wfont2 = new WritableFont(WritableFont.createFont("宋体"),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,"用户名",titleFormat2); //单元格内容--第2格 Label content2c = new Label(2,"记录时间",titleFormat2); //单元格内容--第3格 Label content2d = new Label(3,"操作模块",titleFormat2); //单元格内容--第4格 Label content2e = new Label(4,"操作内容",titleFormat2); //单元格内容--第5格 Label content2f = new Label(5,"操作动作",titleFormat2); //单元格内容--第6格 Label content2g = new Label(6,"操作人IP",titleFormat2); //单元格内容--第7格 Label content2h = new Label(7,"所属组织",titleFormat2); //单元格内容--第8格 Label content2i = new Label(8,"备注",titleFormat2); //单元格内容--第9格 sheet.mergeCells(0,1); /*sheet.mergeCells(0,4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第1列) sheet.mergeCells(1,4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第2列) sheet.mergeCells(2,4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第3列) sheet.mergeCells(3,3,4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第4列) sheet.mergeCells(4,4,4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第5列) sheet.mergeCells(5,5,4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第6列) sheet.mergeCells(6,6,4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第7列) sheet.mergeCells(7,7,4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第8列) sheet.mergeCells(8,4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第9列) sheet.mergeCells(9,9,4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第10列) sheet.mergeCells(10,12,3); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到4行,第11-13列) sheet.mergeCells(13,15,3); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到4行,第14-16列) sheet.mergeCells(16,16,4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第17列) sheet.mergeCells(17,17,4); //所在位置,第几行第几列,即合并的位置,如没合并,可不写;(此处为第3行开始到5行,第18列) sheet.mergeCells(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("宋体"),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("宋体"),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,name,wcf); //用户名 String xrPresent = tc.getLogTime(); if(xrPresent == null){ xrPresent = ""; } Label content2 = new Label(2,xrPresent,wcf); //记录时间 String czModel = tc.getModel(); if(czModel == null){ czModel = ""; } Label content3 = new Label(3,czModel,wcf); //操作模块 String sex = tc.getContent(); if(sex == null){ sex = ""; } Label content4 = new Label(4,sex,wcf); //操作内容 String birthday = tc.getOperate(); if(birthday == null){ birthday = ""; } Label content5 = new Label(5,birthday,wcf); //操作动作 String nation = tc.getIp(); if(nation == null){ nation = ""; } Label content6 = new Label(6,nation,wcf); //操作人IP String origin = tc.getOrgName(); if(origin == null){ origin = ""; } Label content7 = new Label(7,origin,wcf); //所属组织 String bPlace = tc.getRemark(); if(bPlace == null){ bPlace = ""; } Label content8 = new Label(8,bPlace,wcf); //备注 String abc=""; Label content9 = new Label(9,abc,wcf1); //备注 sheet.setRowView(c+2,600); // 设置行高 sheet.setRowView(c+2,600); sheet.setRowView(c+2,600); sheet.mergeCells(0,c+2); // 合并第一列第c+2行到第一列第c+2行的所有单元格 sheet.mergeCells(1,c+2); //mergeCells(a,b,c,d) 单元格合并函数 sheet.mergeCells(2,c+2); //a 单元格的列号 sheet.mergeCells(3,c+2); //b 单元格的行号 sheet.mergeCells(4,c+2); //c 从单元格[a,b]起,向下合并到c列 sheet.mergeCells(5,c+2); //d 从单元格[a,b]起,向下合并到d行 sheet.mergeCells(6,c+2); sheet.mergeCells(7,c+2); sheet.mergeCells(8,c+2); sheet.mergeCells(9,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的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程小技巧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |