首先先在自己工程中导入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. UVA 11859 - Division Game

    看题传送门 题目大意 有一个n * m的矩阵,每个元素均为2~10000之间的正整数,两个游戏者轮流操作.每次可选一行中的1个或者多个大于1的整数把它们中的每个数都变成它的某个真因子,比如12可以变成 ...

  2. 【b091&&z11】潜伏者

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] R国和S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动. 历尽艰险后,潜伏于S国的R国间谍小 ...

  3. ORA-00119: invalid specification for system parameter LOCAL_LISTENER;

    错误提示内容及上下文环境: SQL> grant sysdba to weng;grant sysdba to weng*第 1 行出现错误:ORA-01034: ORACLE not avai ...

  4. 【3005】拦截导弹问题(noip1999)

    Time Limit: 3 second Memory Limit: 2 MB 某国为了防御帝国的导弹袭击,开发出一种导弹拦截系统,但是这种拦截系统有一个缺陷:虽然他的第一发炮弹能达到任意的高度,但是 ...

  5. Android使用BitmapFactory.Options解决加载大图片内存溢出问题

    由于Android对图片使用内存有限制,若是加载几兆的大图片便内存溢出.Bitmap会将图片的所有像素(即长x宽)加载到内存中,如果图片分辨率过大,会直接导致内存溢出(java.lang.OutOfM ...

  6. POJ 1287 Networking (ZOJ 1372) MST

    http://poj.org/problem?id=1287 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=372 和上次那题差 ...

  7. 洛谷 P1709 隐藏口令Hidden Password

    ->题目链接 题解: 贪心+字符串 #include<iostream> #include<cstring> #define N 5000005 using namesp ...

  8. NSCache使用常见错误

    NSCache用来存储缓存数据的时候.和NSDictionary功能类似, 可是NSCache有一个特别的问题: 一旦接收到内存警告之后,假设使用[NSCache removeAllObjects]处 ...

  9. [SCSS] Organize Styles with SCSS Nesting and the Parent Selector

    SCSS nesting can produce DRYer code by targeting child elements without having to write the parent c ...

  10. thinkphp5开发规范(加强复习之前的)

    thinkphp5开发规范(加强复习之前的) 一.总结 一句话总结:和类相关的采用驼峰命名法:变量,函数,类,方法,属性采用驼峰命名发:数据库及文件及配置参数是小写字母加下划:常量大写加下划线 1.T ...