首先先在自己工程中导入jxl的jar包;

疯狂google后找到一段别人的导出excel方法,先备份于下面:

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.util.Vector;

import jxl.Cell;

import jxl.Sheet;

import jxl.Workbook;

import jxl.format.Alignment;

import jxl.format.Colour;

import jxl.format.UnderlineStyle;

import jxl.format.VerticalAlignment;

import jxl.write.Label;

import jxl.write.WritableCellFormat;

import jxl.write.WritableFont;

import jxl.write.WritableSheet;

import jxl.write.WritableWorkbook;

import jxl.write.WriteException;

import jxl.write.biff.RowsExceededException;

public class ExportData {

    /** *//**

     * 导出数据为XLS格式

     * @param fileName        文件的名称,可以设为绝对路径,也可以设为相对路径

     * @param content        数据的内容

     */

    public static void exportExcel(String fileName, Vector<Person> content) {

        WritableWorkbook wwb;

        FileOutputStream fos;

        try {    

            fos = new FileOutputStream(fileName);

            wwb = Workbook.createWorkbook(fos);

            WritableSheet ws = wwb.createSheet("三国志武将列表", 10);        // 创建一个工作表

            //    设置单元格的文字格式

            WritableFont wf = new WritableFont(WritableFont.ARIAL,12,WritableFont.NO_BOLD,false,

                    UnderlineStyle.NO_UNDERLINE,Colour.BLUE);

            WritableCellFormat wcf = new WritableCellFormat(wf);

            wcf.setVerticalAlignment(VerticalAlignment.CENTRE); 

            wcf.setAlignment(Alignment.CENTRE); 

            ws.setRowView(1, 500);

            //    填充数据的内容

            Person[] p = new Person[content.size()];

            for (int i = 0; i < content.size(); i++){

                p[i] = (Person)content.get(i);

                ws.addCell(new Label(1, i + 1, p[i].getName(), wcf));

                ws.addCell(new Label(2, i + 1, p[i].getNickname(), wcf));

                ws.addCell(new Label(3, i + 1, p[i].getPower(), wcf));

                ws.addCell(new Label(4, i + 1, p[i].getWit(), wcf));

                ws.addCell(new Label(5, i + 1, p[i].getPolity(), wcf));

                ws.addCell(new Label(6, i + 1, p[i].getCharm(), wcf));

                ws.addCell(new Label(7, i + 1, p[i].getStory(), wcf));

                if(i == 0)

                    wcf = new WritableCellFormat();

            }

            wwb.write();

            wwb.close();

        } catch (IOException e){

        } catch (RowsExceededException e){

        } catch (WriteException e){}

    }

    /** *//**

     * 从Excel文件里读取数据保存到Vector里

     * @param fileName        Excel文件的名称

     * @return                Vector对象,里面包含从Excel文件里获取到的数据

     */

    public static Vector<Person> importExcel(String fileName){

        Vector<Person> v = new Vector<Person>();

        try {

            Workbook book = Workbook.getWorkbook(new File(fileName));

            Sheet sheet = book.getSheet(0);        // 获得第一个工作表对象 

            int rows = sheet.getRows();

            

            for(int i = 0; i < rows; i++) {

                Cell [] cell = sheet.getRow(i);

                if(cell.length == 0)

                    continue;

                

                Person p = new Person();

                p.setName(sheet.getCell(1, i).getContents());

                p.setNickname(sheet.getCell(2, i).getContents());

                p.setPower(sheet.getCell(3, i).getContents());

                p.setWit(sheet.getCell(4, i).getContents());

                p.setPolity(sheet.getCell(5, i).getContents());

                p.setCharm(sheet.getCell(6, i).getContents());

                p.setStory(sheet.getCell(7, i).getContents());

                v.add(p);

            }

            book.close();

        }catch(Exception e) {} 

        return v;

    }

    public static void main(String [] args){

        String fileName = "C:\\test.xls";

        String fileNameNew = "C:\\testNew.xls";

        

        Person p0 = new Person("姓名","字","武力","智力","政治","魅力","英雄事迹");

        Person p1 = new Person("赵云","子龙","98","84","83","87","单骑救主!!!");

        Person p2 = new Person("马超","孟起","98","62","40","88","杀得曹操割须弃袍!!!");

        Person p3 = new Person("诸葛亮","孔明","55","100","92","93","死后木偶退兵,锦囊杀魏延!!!");

        Vector<Person> v = new Vector<Person>();

        v.add(p0);

        v.add(p1);

        v.add(p2);

        v.add(p3);

        

        exportExcel(fileName, v);

        System.out.println("成功导出数据到Excel文件(" + fileName + ")了!!!");

        

//        Vector<Person> vector = importExcel(fileName);

//        System.out.println("成功从Excel文件(" + fileName + ")导入数据!!!");

//        

//        exportExcel(fileNameNew, vector);

//        System.out.println("成功将" + fileName + "里的数据手复制到" + fileNameNew + "中!!!");

    }

}

上面的方法很好,导出我试过了,很好用,但它只实现了自动生成了excel文件;但是我们项目要求的是:弹出保存/打开excel的对话框,然后直接打开或输入路径再保存;

import java.io.IOException;

import java.io.OutputStream;

import java.util.HashMap;

import java.util.Vector;

import javax.servlet.http.HttpServletResponse;

import jxl.Workbook;

import jxl.format.Alignment;

import jxl.format.Colour;

import jxl.format.UnderlineStyle;

import jxl.format.VerticalAlignment;

import jxl.write.Label;

import jxl.write.WritableCellFormat;

import jxl.write.WritableFont;

import jxl.write.WritableSheet;

import jxl.write.WritableWorkbook;

import jxl.write.WriteException;

import jxl.write.biff.RowsExceededException;

public class ExportExcel {

public static void exportExcel( Object objIn,Object objOut) {

         try {

         //取得response HttpServletResponse

         HashMap hmOut = (HashMap)objOut;

         HashMap hmIn = (HashMap)objIn;

         HttpServletResponse response=(HttpServletResponse)hmIn.get("response");

         //设置table列名

         String excelName =(String)hmIn.get("excelName");

         String[] excelNameArray = excelName.split(",");

         

         

         //取得key

         String[] excelKeyArray = (String[])hmOut.get("excelKey");

         

         OutputStream os = response.getOutputStream();// 取得输出流   

             response.reset();// 清空输出流  

             response.setHeader("Content-disposition", "attachment; filename="+new String("Book1".getBytes("GB2312"),"8859_1")+".xls");// 设定输出文件头   

             response.setContentType("application/msexcel");// 定义输出类型 

             

             WritableWorkbook wwb = Workbook.createWorkbook(os); // 建立excel文件   

         

             WritableSheet ws = wwb.createSheet("Sheet1", 10);        // 创建一个工作表

             //    设置单元格的文字格式

             WritableFont wf = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,

                     UnderlineStyle.NO_UNDERLINE,Colour.BLUE);

             WritableCellFormat wcf = new WritableCellFormat(wf);

             wcf.setVerticalAlignment(VerticalAlignment.CENTRE); 

             wcf.setAlignment(Alignment.CENTRE); 

             ws.setRowView(0, 500);

             //    填充数据的内容

             int len=((String[])hmOut.get(excelKeyArray[0])).length;

             //设置列头名

         for (int j=0;j<excelKeyArray.length;j++){

            ws.addCell(new Label(j, 0, excelNameArray[j], wcf));

         }

         //设置内容

         wcf = new WritableCellFormat();

             for (int i = 0; i <len; i++){

             for (int j=0;j<excelKeyArray.length;j++){

                ws.addCell(new Label(j, i+1, ((String[])hmOut.get(excelKeyArray[j]))[i], wcf));

             }

             }

             wwb.write();

             wwb.close();

         } catch (IOException e){

         } catch (RowsExceededException e){

         } catch (WriteException e){}

     }

}

注:现在弹出对话框,就是说要用io流的方式,io流就要从response中取;这里要导入tomcat里的一个jar:servlet.jar

jxl导出Excel的更多相关文章

  1. JXL导出Excel(只支持xls版本)——(一)

    注意: 导出的后缀是xls可以直接打开,如果导出的后缀是xlsx打开报错,需要手动将名字改为xls才可以打开.也就是JXL不可以导出xlsx的excel. Jar包

  2. jxl导出excel的问题

    jxl导出excel,通常浏览器会提示excel导出完成情况及默认保存路径,或让用户自定义选择保存路径,要达到这种效果,有些要做下修改,如:response是jsp的内置对象,在jsp中使用时不用声明 ...

  3. Java web项目JXl导出excel,(从eclipse上移动到tomact服务器上,之路径更改)

    我用的是jxl导出excel,比较简单,最开始我是固定路径不能选择,很局限,后来改了,而且固定路径当把项目放在服务器上时,路径不可行. 在网上各位大神的帮助成功设置响应头,并且可选保存路径. 1.前端 ...

  4. jxl导出Excel中需要跳过的的坑

    正如上篇文章(JXL封装不能使用static关键字问题)所说,在jxl导出Excel时候如果频繁使用到WritableCellFormat去设置单元格的样式,这个时候经常会出现两种情况: 1.报警告: ...

  5. java中使用jxl导出Excel表格详细通用步骤

    该方法一般接收两个参数,response和要导出的表格内容的list. 一般我们将数据库的数据查询出来在页面进行展示,根据用户需求,可能需要对页面数据进行导出. 此时只要将展示之前查询所得的数据放入s ...

  6. jxl导出Excel文件

    一.java项目实现读取Excel文件和导出Excel文件 实现读取和导出Excel文件的代码: package servlet; import java.io.FileInputStream; im ...

  7. poi 和jxl导出excel(2)

    controller: /** * 导出报表 * @return */ @RequestMapping(value = "/export") @ResponseBody publi ...

  8. JXL导出Excel工具类

    将Excel中的数据读取到List<Map<String, Object>>集合中   package com.mvc.util;   import java.io.File; ...

  9. JAVA利用JXL导出 EXCEL (在原有的excel模板上把数据导到excel上)

    添加依赖 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>j ...

随机推荐

  1. testng并发测试与测试并发

    一.testng并发测试 通过xml文件中suit结点的parallel属性指定,如 <suite name="bundle-module-testabc" parallel ...

  2. 3D 应用程序性能

    原文:3D 应用程序性能 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671/article/details/74595999 3 ...

  3. LVS负载均衡+动静分离+高可用(nginx+tomcat+keepalived)

    文章目录 [隐藏] 一.环境介绍 二.环境安装 1.安装JDK 2.两台服务器安装tomcat 3.nginx安装 4.keepalive安装 三.负载均衡 四.动静分离 五.keepalive高可用 ...

  4. [RxJS] Replace zip with combineLatest when combining sources of data

    This lesson will highlight the true purpose of the zip operator, and how uncommon its use cases are. ...

  5. ARM 授权费用太贵 科技巨头欲转向开源架构 RISC-V

    不久前,特斯拉加入 RISC-V 基金会,并考虑在新款芯片中使用免费的 RISC-V 设计.至此,已有 IBM.NXP.西部数据.英伟达.高通.三星.谷歌.华为等 100 多家科技公司加入 RISC- ...

  6. div宽度设置width:100%后再设置padding或margin超出父元素的解决办法

    div宽度设置width:100%后再设置padding或margin超出父元素的解决办法 一.总结 一句话总结:直接加上box-sizing:border-box;即可解决上述问题. 1.box-s ...

  7. [SCSS] Reuse Styles with the SCSS @mixin Directive

    Copy/pasting the same code is redundant and updating copy/pasted code slows development velocity. Mi ...

  8. HDOJ 2043 password

    刚開始看到这个题目的时候,就直接理解成仅仅要是长度符合要求而且字符符合要求,就是一个安全的password了,并没有考虑到至少要3种字符的组合.然后就直接写程序了(先暂且觉得题目就是那个意思),在測试 ...

  9. 【19.46%】【codeforces 551B】ZgukistringZ

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  10. 关于如何在Sublime下安装插件

    安装插件的两种方式 通过Package Control安装 不能安装 手工安装 安装插件的两种方式 在sublime下安装插件有两种方式,一种是通过package control来进行安装,另一种呢就 ...