jxl导出Excel .
来源:互联网 发布:手机棋牌软件作弊器 编辑:程序博客网 时间:2024/06/05 00:24
以前是用Poi做Excel的操作、最近一个项目用jxl来做!现在项目完成了、做做总结!
首先呢、需要的当然是jxl的.jar包!---------->jxl.jar<------------
代码:因为这次的导出业务不怎么复杂稍微把对Excel导出的操作提了一下
- /**
- * @author 旦旦而学
- * @param file 文件对象
- * @param objData 导出内容数组
- * @param sheetName 导出工作表的名称
- * @param columns 导出Excel的表头数组
- * @return
- */
- public static int exportToExcel_3(File file, Object[] objData, String sheetName,
- String[] columns) {
- int flag = 0;
- //声明工作簿jxl.write.WritableWorkbook
- WritableWorkbook wwb;
- try {
- //根据传进来的file对象创建可写入的Excel工作薄
- wwb = Workbook.createWorkbook(file);
- /*
- * 创建一个工作表、sheetName为工作表的名称、"0"为第一个工作表
- * 打开Excel的时候会看到左下角默认有3个sheet、"sheet1、sheet2、sheet3"这样
- * 代码中的"0"就是sheet1、其它的一一对应。
- * createSheet(sheetName, 0)一个是工作表的名称,另一个是工作表在工作薄中的位置
- */
- WritableSheet ws = wwb.createSheet(sheetName, 0);
- //创建单元格样式
- WritableCellFormat wcf = new WritableCellFormat();
- //背景颜色设置为"那什么"色
- wcf.setBackground(Colour.YELLOW);
- /*
- * 这个是单元格内容居中显示
- * 还有很多很多样式
- */
- wcf.setAlignment(Alignment.CENTRE);
- //判断一下表头数组是否有数据
- if (columns != null && columns.length > 0) {
- //循环写入表头
- for (int i = 0; i < columns.length; i++) {
- /*
- * 添加单元格(Cell)内容addCell()
- * 添加Label对象Label()
- * 数据的类型有很多种、在这里你需要什么类型就导入什么类型
- * 如:jxl.write.DateTime 、jxl.write.Number、jxl.write.Label
- * Label(i, 0, columns[i], wcf)
- * 其中i为列、0为行、columns[i]为数据、wcf为样式
- * 合起来就是说将columns[i]添加到第一行(行、列下标都是从0开始)第i列、样式为什么"色"内容居中
- */
- ws.addCell(new Label(i, 0, columns[i], wcf));
- }
- //判断表中是否有数据
- if (objData != null && objData.length > 0) {
- //循环写入表中数据
- for (int i = 0; i < objData.length; i++) {
- //我这里直接用Object来接收了、因为情况特殊没有javaBean很痛苦、转换过后得到一条记录
- Object obj[] = (Object[]) objData[i];
- //将得到的记录写入Cell(单元格)中
- for (int j = 0; j < obj.length; j++) {
- //这里不引用样式了、j为列、(i+1)为行、因为表头占去了一行、所以后面的就+1
- ws.addCell(new Label(j, i + 1, String.valueOf(obj[j])));
- }
- }
- }
- //写入Exel工作表
- wwb.write();
- //关闭Excel工作薄对象
- wwb.close();
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- System.out.println(ex.getMessage());
- flag = 1;
- }
- return flag;
- }
- /**
- * 下载excel
- * @author 旦旦而学
- * @param response
- * @param url 文件存放路径,如: request.getRealPath("/");
- * @param filename 文件名 ,如:20110808.xls
- * @param listData 数据源
- * @param sheetName 表头名称
- * @param columns 列名称集合,如:{物品名称,数量,单价}
- */
- public static void exportexcle_3(HttpServletResponse response,String url,String filename,Object[] listData,String sheetName,String[] columns)
- {
- //根据传进来的文件路径、创建文件
- File file = new File(url + filename);
- //调用上面的方法、生成Excel文件
- exportToExcel_3(file, listData, sheetName, columns);
- //声明一个file对象
- File f=null;
- try {
- //根据刚刚的文件地址、创建一个file对象
- f = new File(url + filename);
- //如果文件不存在
- if (!f.exists()) {
- response.sendError(404, "File not found!");
- }
- //创建一个缓冲输入流对象
- BufferedInputStream br = new BufferedInputStream(
- new FileInputStream(f));
- byte[] buf = new byte[1024];
- int len = 0;
- response.reset(); // 非常重要
- response.setContentType("application/x-msdownload");
- response.setHeader("Content-Disposition", "attachment; filename="
- + f.getName());
- //创建输出流对象
- OutputStream outStream = response.getOutputStream();
- //开始输出
- while ((len = br.read(buf)) > 0)
- outStream.write(buf, 0, len);
- //关闭流对象
- br.close();
- outStream.close();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- if (f.exists()) {//下载完毕删除文件
- f.delete();
- }
- }
/** * @author 旦旦而学 * @param file 文件对象 * @param objData 导出内容数组 * @param sheetName 导出工作表的名称 * @param columns 导出Excel的表头数组 * @return */public static int exportToExcel_3(File file, Object[] objData, String sheetName,String[] columns) {int flag = 0;//声明工作簿jxl.write.WritableWorkbookWritableWorkbook wwb;try {//根据传进来的file对象创建可写入的Excel工作薄wwb = Workbook.createWorkbook(file);/* * 创建一个工作表、sheetName为工作表的名称、"0"为第一个工作表 * 打开Excel的时候会看到左下角默认有3个sheet、"sheet1、sheet2、sheet3"这样 * 代码中的"0"就是sheet1、其它的一一对应。 * createSheet(sheetName, 0)一个是工作表的名称,另一个是工作表在工作薄中的位置 */WritableSheet ws = wwb.createSheet(sheetName, 0);//创建单元格样式WritableCellFormat wcf = new WritableCellFormat();//背景颜色设置为"那什么"色wcf.setBackground(Colour.YELLOW);/* * 这个是单元格内容居中显示 * 还有很多很多样式 */wcf.setAlignment(Alignment.CENTRE);//判断一下表头数组是否有数据if (columns != null && columns.length > 0) {//循环写入表头for (int i = 0; i < columns.length; i++) {/* * 添加单元格(Cell)内容addCell() * 添加Label对象Label() * 数据的类型有很多种、在这里你需要什么类型就导入什么类型 * 如:jxl.write.DateTime 、jxl.write.Number、jxl.write.Label * Label(i, 0, columns[i], wcf) * 其中i为列、0为行、columns[i]为数据、wcf为样式 * 合起来就是说将columns[i]添加到第一行(行、列下标都是从0开始)第i列、样式为什么"色"内容居中 */ws.addCell(new Label(i, 0, columns[i], wcf));}//判断表中是否有数据if (objData != null && objData.length > 0) {//循环写入表中数据for (int i = 0; i < objData.length; i++) {//我这里直接用Object来接收了、因为情况特殊没有javaBean很痛苦、转换过后得到一条记录Object obj[] = (Object[]) objData[i];//将得到的记录写入Cell(单元格)中for (int j = 0; j < obj.length; j++) {//这里不引用样式了、j为列、(i+1)为行、因为表头占去了一行、所以后面的就+1ws.addCell(new Label(j, i + 1, String.valueOf(obj[j])));}}}//写入Exel工作表wwb.write();//关闭Excel工作薄对象 wwb.close();}} catch (Exception ex) {ex.printStackTrace();System.out.println(ex.getMessage());flag = 1;}return flag;}/** * 下载excel * @author 旦旦而学 * @param response * @param url 文件存放路径,如: request.getRealPath("/"); * @param filename 文件名 ,如:20110808.xls * @param listData 数据源 * @param sheetName 表头名称 * @param columns 列名称集合,如:{物品名称,数量,单价} */public static void exportexcle_3(HttpServletResponse response,String url,String filename,Object[] listData,String sheetName,String[] columns){//根据传进来的文件路径、创建文件File file = new File(url + filename);//调用上面的方法、生成Excel文件exportToExcel_3(file, listData, sheetName, columns);//声明一个file对象File f=null;try {//根据刚刚的文件地址、创建一个file对象f = new File(url + filename);//如果文件不存在if (!f.exists()) {response.sendError(404, "File not found!");}//创建一个缓冲输入流对象BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));byte[] buf = new byte[1024];int len = 0;response.reset(); // 非常重要response.setContentType("application/x-msdownload");response.setHeader("Content-Disposition", "attachment; filename="+ f.getName());//创建输出流对象OutputStream outStream = response.getOutputStream();//开始输出while ((len = br.read(buf)) > 0)outStream.write(buf, 0, len);//关闭流对象br.close();outStream.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}if (f.exists()) {//下载完毕删除文件f.delete();}}
在Action中只需在获取完数据库中的数据过后直接调用上面的方法、并传入参数就Ok了!
- Object[] repObj = report.queryMaintainUnit(obj,pageInfo);
- String[] strArr = {"流水号","路段名","维护站名","所属系统",
- "故障等级","维护工区","派工时间","维修单位",
- "接修时间","处理结果","维修结果"};
- ExportDate expor = new ExportDate();
- expor.exportexcle_3(response,this.getUrl(),this.getFileName(),
- repObj,"维修单位明细表",strArr);
Object[] repObj = report.queryMaintainUnit(obj,pageInfo);String[] strArr = {"流水号","路段名","维护站名","所属系统","故障等级","维护工区","派工时间","维修单位","接修时间","处理结果","维修结果"};ExportDate expor = new ExportDate();expor.exportexcle_3(response,this.getUrl(),this.getFileName(),repObj,"维修单位明细表",strArr);
这是查询出来的数据:
Excel:
在加上分页功能过后、数据出了问题、当点击下一页的时候、会多出一列、这一列是Oracle数据库分页时添加的rownum列、1、2、3、4、5、6、这样!
因为我的数据在输出的时候没有用到javaBean、用的是数组、所以输出的时候、连后面的那一列也一起输出了!
这样需要判断一下、但是不知道为什么、第一页的时候rownum列不会出现、第二页还有后面的页rownum就会跑出来!
虽然占时解决了、但是害怕它哪天不高兴出点什么乱子就老火了!
-------------------------------------------
下面在来个直接Servlet的!
- /*
- * Excel文件名
- */
- private String fileName;
- public String getFileName() {
- this.setFileName("用户信息"+".xls");
- return fileName;
- }
- public void setFileName(String fileName) {
- this.fileName = fileName;
- }
- /*
- * 文件存储路径
- */
- private String url;
- public String getUrl(HttpServletRequest request) {
- File f = new File(request.getRealPath("/")+"ExcelData//");
- //如果文件不存在则创建文件夹
- if (!f.exists()) {
- f.mkdir();
- }
- this.setUrl(request.getRealPath("/")+"ExcelData//");
- return url;
- }
- public void setUrl(String url) {
- this.url = url;
- }
/* * Excel文件名 */private String fileName;public String getFileName() {this.setFileName("用户信息"+".xls");return fileName;}public void setFileName(String fileName) {this.fileName = fileName;} /* * 文件存储路径 */private String url;public String getUrl(HttpServletRequest request) {File f = new File(request.getRealPath("/")+"ExcelData//");//如果文件不存在则创建文件夹if (!f.exists()) { f.mkdir();}this.setUrl(request.getRealPath("/")+"ExcelData//");return url; }public void setUrl(String url) {this.url = url;}
- /**
- * 导出用户信息
- * @param request
- * @param response
- * @return
- * @throws Exception
- */
- public void exportBoss_Users(HttpServletRequest request, HttpServletResponse response )throws Exception{
- String productnoId = request.getParameter("productnoId");
- String customnoId = request.getParameter("customno");
- List<UsersInfo> userList = new UsersInfoImpl().findBoss_UsersInfoAll(productnoId, customnoId);
- File file = null;
- PrintWriter out = null;
- try{
- request.setCharacterEncoding("UTF-8");
- response.setContentType("text/html;charset=UTF-8");
- out = response.getWriter();
- file = new File(this.getUrl(request) + this.getFileName());
- WritableWorkbook wwb;
- wwb = Workbook.createWorkbook(file);
- WritableSheet ws = wwb.createSheet("用户信息Excel", 0);
- String[] columns = {"用户姓名","用户手机","用户性别","所属部门","累计消费值","创建时间","帐号状态"};
- for (int i = 0; i < columns.length; i++) {
- ws.addCell(new Label(i, 0, columns[i]));
- }
- for (int i = 0; i < userList.size(); i++) {
- UsersInfo users = userList.get(i);
- ws.addCell(new Label(0, i+1, users.getUsersName()));
- ws.addCell(new Label(1, i+1, users.getUsersPhone()));
- ws.addCell(new Label(2, i+1, users.getUsersSex()));
- ws.addCell(new Label(3, i+1, users.getUsersDept()));
- ws.addCell(new Label(4, i+1, users.getUsersSum()));
- ws.addCell(new Label(5, i+1, users.getUsersCreatedate()));
- int num = Integer.parseInt(users.getUsersStatus()+"");
- String stAry = "";
- switch (num) {
- case 1:
- stAry = "启用" ;
- break;
- case 2:
- stAry = "禁用" ;
- break;
- default:
- stAry = "注销" ;
- break;
- }
- ws.addCell(new Label(6, i+1, stAry));
- }
- wwb.write();
- wwb.close();
- BufferedInputStream br = new BufferedInputStream(
- new FileInputStream(file));
- byte[] buf = new byte[1024];
- int len = 0;
- response.reset(); // 非常重要
- response.setContentType("application/x-msdownload");
- response.setHeader("Content-Disposition", "attachment; filename="
- + new String(file.getName().getBytes(),"iso-8859-1"));
- OutputStream outStream = response.getOutputStream();
- while ((len = br.read(buf)) > 0)
- outStream.write(buf, 0, len);
- br.close();
- outStream.close();
- }catch(Exception ex){
- ex.printStackTrace();
- out.print("<script>alert('导出用户信息失败、请从试!');</script>");
- }finally{
- if (file.exists()) {//下载完毕删除文件
- file.delete();
- }
- if(out!=null){
- out.flush();
- out.close();
- }
- }
- }
/** * 导出用户信息 * @param request * @param response * @return * @throws Exception */public void exportBoss_Users(HttpServletRequest request, HttpServletResponse response )throws Exception{String productnoId = request.getParameter("productnoId");String customnoId = request.getParameter("customno");List<UsersInfo> userList = new UsersInfoImpl().findBoss_UsersInfoAll(productnoId, customnoId);File file = null;PrintWriter out = null;try{request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");out = response.getWriter();file = new File(this.getUrl(request) + this.getFileName());WritableWorkbook wwb; wwb = Workbook.createWorkbook(file);WritableSheet ws = wwb.createSheet("用户信息Excel", 0);String[] columns = {"用户姓名","用户手机","用户性别","所属部门","累计消费值","创建时间","帐号状态"};for (int i = 0; i < columns.length; i++) { ws.addCell(new Label(i, 0, columns[i])); }for (int i = 0; i < userList.size(); i++) {UsersInfo users = userList.get(i);ws.addCell(new Label(0, i+1, users.getUsersName())); ws.addCell(new Label(1, i+1, users.getUsersPhone()));ws.addCell(new Label(2, i+1, users.getUsersSex())); ws.addCell(new Label(3, i+1, users.getUsersDept())); ws.addCell(new Label(4, i+1, users.getUsersSum())); ws.addCell(new Label(5, i+1, users.getUsersCreatedate())); int num = Integer.parseInt(users.getUsersStatus()+"");String stAry = "";switch (num) { case 1: stAry = "启用" ; break;case 2: stAry = "禁用" ; break;default:stAry = "注销" ; break;}ws.addCell(new Label(6, i+1, stAry)); }wwb.write();wwb.close();BufferedInputStream br = new BufferedInputStream(new FileInputStream(file));byte[] buf = new byte[1024];int len = 0;response.reset(); // 非常重要response.setContentType("application/x-msdownload");response.setHeader("Content-Disposition", "attachment; filename="+ new String(file.getName().getBytes(),"iso-8859-1")); OutputStream outStream = response.getOutputStream();while ((len = br.read(buf)) > 0)outStream.write(buf, 0, len);br.close();outStream.close();}catch(Exception ex){ex.printStackTrace();out.print("<script>alert('导出用户信息失败、请从试!');</script>");}finally{if (file.exists()) {//下载完毕删除文件file.delete();}if(out!=null){ out.flush();out.close();}}}
以前用的是UUID文件名、没发现乱码这么一说。
今天导出的时候发现了乱码
什么utf、gbk都是浮云!
直接用:
- response.setHeader("Content-Disposition", "attachment; filename="
- + new String(file.getName().getBytes(),"iso-8859-1"));
response.setHeader("Content-Disposition", "attachment; filename="+ new String(file.getName().getBytes(),"iso-8859-1"));搞定!
- jxl 导出excel
- 使用jxl导出excel
- jxl导出excel
- Java jxl导出excel
- jxl实现导出excel
- Jxl导出Excel实现
- jxl导出Excel
- jxl 导出Excel
- jxl导出Excel
- jxl导出EXCEL
- 使用JXL导出excel
- JXL导入导出EXCEL
- jxl 方式导出excel
- jxl导出excel
- jxl 实现导出excel
- jxl导出excel
- jxl导出excel
- jxl导出Excel .
- 回归自然
- android GoogleMap定位(二)
- ASP.NET MVC3 Areas 分离项目 同名控制器(同名Controller) 演示demo
- 设计公共API的六个注意事项
- android GoogleMap定位(一)
- jxl导出Excel .
- inux系统下jdk1.6安装
- 红尘依梦
- 变长参数应用
- DM9000AEP调试经历
- 【笔试学习工作必备!】六道经典SQL语句题完全掌握SQL语句
- DM9000AEP调试的时候注意事项:
- redis之zipmap
- 土坷垃的情怀