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

(0)

相关推荐

  • java导出数据库中Excel表格数据的方法

    本篇文章基于java把数据库中的数据以Excel的方式导出,欢迎各位大神吐槽: 1.基于maven jar包引入如下: <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>jxl</artifactId> <version>2.6.12</version> </dependency> 2.首先创建数据库对应的实体类VO :U

  • Java数据导出功能之导出Excel文件实例

    在编程中经常需要使用到表格(报表)的处理主要以Excel表格为主.下面给出用java写入数据到excel表格方法: 1.添加jar文件 java导入导出Excel文件要引入jxl.jar包,最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件.下载地址:http://www.andykhan.com/jexcelapi/ 2.jxl对Excel表格的认识 可以参见:http://www.jb51.net/article/686

  • java实现的导出Excel工具类实例

    本文实例讲述了java实现的导出Excel工具类.分享给大家供大家参考,具体如下: ExcelExportUtil: package com.excel; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.

  • java导出Excel通用方法的实例详解

    java导出Excel通用方法的实例详解 Java导出Excel通用方法,只需要一个list 集合.通用方法改进之处踊跃提出 package oa.common.utils; import java.io.OutputStream; import java.util.List; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import java.lan

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

    优点: Jxl对中文支持非常好,操作简单,方法看名知意. Jxl是纯javaAPI,在跨平台上表现的非常完美,代码可以再windows或者Linux上运行而无需重新编写 支持Excel 95-2000的所有版本(网上说目前可以支持Excel2007了,还没有尝试过) 生成Excel 2000标准格式 支持字体.数字.日期操作 能够修饰单元格属性 支持图像和图表,但是这套API对图形和图表的支持很有限,而且仅仅识别PNG格式. 缺点: 效率低,图片支持不完善,对格式的支持不如POI强大 案例: S

  • C#自定义导出数据到Excel的类实例

    本文实例讲述了C#自定义导出数据到Excel的类.分享给大家供大家参考.具体如下: C#自定义Excel操作类,可以用于将DataTable导出到Excel文件,从Excel文件读取数据. using System; using System.IO; using System.Data; using System.Collections; using System.Data.OleDb; using System.Web; using System.Web.UI; using System.We

  • Python实现导出数据生成excel报表的方法示例

    本文实例讲述了Python实现导出数据生成excel报表的方法.分享给大家供大家参考,具体如下: #_*_coding:utf-8_*_ import MySQLdb import xlwt from datetime import datetime def get_data(sql): # 创建数据库连接. conn = MySQLdb.connect(host='127.0.0.1',user='root'\ ,passwd='123456',db='test',port=3306,char

  • Python导出数据到Excel可读取的CSV文件的方法

    本文实例讲述了Python导出数据到Excel可读取的CSV文件的方法.分享给大家供大家参考.具体实现方法如下: import csv with open('eggs.csv', 'wb') as csvfile: #spamwriter = csv.writer(csvfile, delimiter=' ',quotechar='|', #quoting=csv.QUOTE_MINIMAL) spamwriter = csv.writer(csvfile, dialect='excel') s

  • JSP实现从数据库导出数据到Excel下载的方法

    本文实例讲述了JSP实现从数据库导出数据到Excel下载的方法.分享给大家供大家参考,具体如下: 关键代码: <%@ page contentType="application/msexcel" %> <% //response.setHeader("Content-disposition","inline; filename=videos.xls"); response.setHeader("Content-disp

  • C#使用oledb导出数据到excel的方法

    本文实例讲述了C#使用oledb导出数据到excel的方法.分享给大家供大家参考,具体如下: 现在做应用的一半都会碰到数据导出的问题,导出到word阿,导出到excel啊,还有其他的什么.当然导出的类型中还是以ms office的居多.最近在做数据的转换,也碰到这个导出的问题,当然幸运的是不用碰word,这样涉及到就只有xml,csv,tsv和最"痛苦"的excel了. 最开始的想法是xml+xslt,搞定全部,但是有一个问题就是excel只有在xp版本之后支持xml,我不能强制的要求

  • C#导出数据到Excel文件的方法

    本文实例讲述了C#导出数据到Excel文件的方法.分享给大家供大家参考.具体实现方法如下: /// <summary> /// 导出到Excel类,项目需引用Microsodt.Office.Interop.Excel, /// 类文件需using System.Data与System.Windows.Forms命名空间 /// </summary> public class CToExcel { /// <summary> /// 导出到Excel /// </

  • ASP.NET MVC使用EPPlus,导出数据到Excel中

    好久没写博客了,今天特地来更新一下,今天我们要学习的是如何导出数据到Excel文件中,这里我使用的是免费开源的Epplus组件. 源代码下载:https://github.com/caofangsheng93/ExcelExportInMvc 介绍 这篇文章,介绍的是怎样导出数据到Excel文件中,大多数的后端程序都有报表功能:把显示在Grid中的数据导出到Excel文件中,这篇文章中使用的是EPPlus组件. EPPlus是一个基于OOXML[Open Extended Markup Lang

  • ASP.NET导出数据到Excel的实现方法

    网上好些代码的原理大致与此类似,同样都存在一个问题,就是: 类型"GridView"的控件"ctl00_center_GridView1"必须放在具有 runat=server 的窗体标记内. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息:System.Web.HttpException: 类型"GridView"的控件"ctl00_cent

  • 利用PHPExcel读取Excel的数据和导出数据到Excel

    PHPExcel是一个PHP类库,用来帮助我们简单.高效实现从Excel读取Excel的数据和导出数据到Excel.也是我们日常开发中,经常会遇到的使用场景.比如有个客户信息表,要批量导出发给同事,我们就可以用PHPExcel来快速实现.同样,如果我们要利用短信群发接口去群发信息,PHPExcel可以快速导入客户信息,避免人工录入信息的麻烦. PHPExcel使用教程: 首先下载PHPExcel 到https://github.com/PHPOffice/PHPExcel下载PHPExcel,如

随机推荐