首先先在自己工程中导入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. 【57.97%】【codeforces Round #380A】Interview with Oleg

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  2. SQLite header and source version mismatch解决方案

    SQLite header and source version mismatch 最近需要用到sqlite,去官网下了一个编译安装后打开sqlite3出现SQLite header and sour ...

  3. 2.CCGridAction(3D效果),3D反转特效,凸透镜特效,液体特效,3D翻页特效,水波纹特效,3D晃动的特效,扭曲旋转特效,波动特效,3D波动特效

     1 类图组织 2 实例 CCSprite * spr = CCSprite::create("HelloWorld.png"); spr->setPosition(cc ...

  4. Apache多虚拟主机多版本PHP(5.3+5.6+N)共存运行配置全过程

    摘要: 为需要实现在同一台Linux服务器上面,同时运行多个不同版本的PHP程序,本文我们将使用FastCGI方式加载,并把过程详细记录下来方便大家参考. 常规的PHP配置方式有很多种,例如CGI.f ...

  5. POJ 2363 Blocks (ZOJ 1910) 数学

    杨宗纬的歌"这一路走来" 还蛮好听的,这首歌静静的躺在我的音乐盒某个阴暗的角落里,今天随机播放才发现的,哈哈. 数学一直是硬伤...... -------------------- ...

  6. redis 的惊群处理和分布式锁的应用例子

    在并发量比较高的情况下redis有很多应用场景,提升查询效率,缓解底层DBio ,下面列举两个平时开发中应用过的两个例子,欢迎各位一起讨论改进. 1 . redis 惊群处理 1.1 方案的由来 Re ...

  7. Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)

    Crazy Bobo Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Tota ...

  8. C++中的虚析构函数、纯虚析构函数具体解释

    C++中析构函数能够为纯虚函数吗? 众所周知.在实现多态的过程中,一般将基类的析构函数设为virtual.以便在delete的时候能够多态的链式调用.那么析构函数能否够设为纯虚呢? class CBa ...

  9. centos7 安装php环境和安装swoole

    这仅是我在网上找了多个解决方法,搞定了我遇到的问题,做的一个记录,买这个服务器就是为了测试swoole,结果快到期了,swoole还没装好 感谢https://www.cnblogs.com/phpw ...

  10. [Angular] How to styling ng-content

    Let's say you are builing a reuseable component. The style structure like this: div > input If yo ...