当前位置: 移动技术网 > IT编程>开发语言>Java > jxl 导出数据到excel的实例讲解

jxl 导出数据到excel的实例讲解

2019年07月19日  | 移动技术网IT编程  | 我要评论

有妻足焉,金正日强吻普京,中国证券投资网

优点:

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的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网