jxl 导出数据到excel的实例讲解
程序员文章站
2023-12-05 16:46:46
优点:
jxl对中文支持非常好,操作简单,方法看名知意。
jxl是纯javaapi,在跨平台上表现的非常完美,代码可以再windows或者linux上运行而无需重新编写...
优点:
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的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。