java 导出数据到指定的excel模板中。

来源:互联网 发布:linux top排序 编辑:程序博客网 时间:2024/06/05 23:02

为什么这样写呢,因为这样写方便修改,不会出太多的乱子!直奔主题:

使用的JXL包

结果:

EXCEL样式:

页面样式:

网页页面链接:

location.href = "physical.do?method=InitDownLoad&downLoadPath="+ encodeURIComponent(encodeURIComponent(downLoadPath));

location.href是打开窗口并自动下载,这个很重要

下面是后台代码:

后台代码分了七个类,有6是公共方法为一个类服务,我贴顺序是主要,次要。。。。。

ExcelTool.java

复制代码
package com.hna.aircrewhealth.excel.utils;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.lang.reflect.Field;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import com.hna.aircrewhealth.po.AviatorHealthCheck;import com.hna.aircrewhealth.security.po.Staff;import jxl.Cell;import jxl.Sheet;import jxl.Workbook;import jxl.read.biff.BiffException;import jxl.write.DateTime;import jxl.write.Label;import jxl.write.Number;import jxl.write.WritableCell;import jxl.write.WritableWorkbook;import jxl.write.WriteException;public class ExcelTool {    private static String path = "F:\\luokq\\aircrewhealth\\template\\重大疾病报告单.xls";    private final static String defaultName = "航医跟班检查记录单.xls";    public static String getPath() {        return path;    }    public static void setPath(String p) {        path = p;    }  //这个MAIN方法是个DEMO 可以参照这个写法     public static void main(String[] arg) {        AviatorHealthCheck bean = new AviatorHealthCheck();        bean.setId("3FCB19B440E74DF1BD50CD123A3C087C");        bean.setHealthCheckFlightNum("NB-38-54321");        Staff s = new Staff(); //声明一个实体类        s.setName("王八");             bean.setFollowDoctor(s);        bean.setNoddeid("878787");        bean.setStartTime("1987-02-25");        bean.setEndTime("1987-02-25");        bean.setFollowContext("脸可大饿,打瞌睡,而开发,奥东科咳咳咳什么刺激附近的库斯科到看风景的库斯科,道可服务端");        Map<String, Object> map = new HashMap<String, Object>();   //声明一个map        map.put("AviatorHealthCheck", bean);  //将实体放入Map,因为是按Map输出的/**
*下面这个是循环用的
*/ List
<Object> list = new ArrayList<Object>(); for (int i = 0; i < 6; i++) { bean = new AviatorHealthCheck(); bean.setId("3FCB19B440E74DF1BD50CD123A3C087C"+"----"+i); bean.setHealthCheckFlightNum("NB-38-54321"+"----"+i); s = new Staff(); s.setName("王八"+"----"+i); bean.setFollowDoctor(s); bean.setNoddeid("878787"+"----"+i); bean.setStartTime("1987-02-25"+"----"+i); bean.setEndTime("1987-02-25"+"----"+i); bean.setFollowContext("脸可大饿,打瞌睡,而开发,奥东科咳咳咳什么刺激附近的库斯科到看风景的库斯科,道可服务端"+"----"+i); list.add(bean); } map.put("listname", list); map.put("listname2", list);/**这是循环结束了*/ exportExcel(path, map); //这个最主要,是导出Excel的方法 } /** * 导出 Excel * * @param template * Excel模板 * @param datas * 数据 * @return */ public static FileInputStream exportExcel(String template, Map<String, Object> datas) { FileInputStream fis = null; InputStream is = FileTool.getFileInputStream(template); try { if (is != null) { Workbook book = Workbook.getWorkbook(is); File tempFile = File.createTempFile("temp", ".xls"); WritableWorkbook wWorkbook = Workbook.createWorkbook(tempFile, book); /** 处理【表达式】类型的数据。 **/ generateExpData(book, wWorkbook, datas); /** 处理【循环结果集】类型的数据。 **/ generateEachData(book, wWorkbook, datas); wWorkbook.write(); wWorkbook.close(); fis = new FileInputStream(tempFile); } } catch (BiffException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (WriteException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ if(is!=null){ try { is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return fis; } public static FileInputStream exportExcel1(String template, Map<String, Object> datas) { FileInputStream fis = null; InputStream is = FileTool.getFileInputStream(template); try { if (is != null) { Workbook book = Workbook.getWorkbook(is); File tempFile = File.createTempFile("temp", ".xls"); WritableWorkbook wWorkbook = Workbook.createWorkbook(tempFile, book); /** 处理【表达式】类型的数据。 **/ generateExpData1(book, wWorkbook, datas); /** 处理【循环结果集】类型的数据。 **/ generateEachData(book, wWorkbook, datas); wWorkbook.write(); wWorkbook.close(); fis = new FileInputStream(tempFile); } } catch (BiffException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (WriteException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ if(is!=null){ try { is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return fis; } /** * 处理【表达式】类型的数据。 * * @param book * 【模板】对象 * @param wWorkbook * 根据模板创建的【新数据文件】对象 */ private static void generateExpData(Workbook book, WritableWorkbook wWorkbook, Map<String, Object> datas) throws Exception { List<ExcelCells> expcells = search("${", book); for (ExcelCells cell : expcells) { wWorkbook.getSheet(cell.getSheetIndex()).addCell(getValueByExp(cell, datas)); } } private static void generateExpData1(Workbook book, WritableWorkbook wWorkbook, Map<String, Object> datas) throws Exception { List<ExcelCells> expcells = search("${", book); for (ExcelCells cell : expcells) { wWorkbook.getSheet(cell.getSheetIndex()).addCell(getValueByExp1(cell, datas)); } } /** * 处理【循环结果集】类型的数据 * * @param book * 【模板】对象 * @param wWorkbook * 根据模板创建的【新数据文件】对象 */ private static void generateEachData(Workbook book, WritableWorkbook wWorkbook, Map<String, Object> datas) throws Exception { List<ExcelCells> each = search("each.", book); /* 先对模板列对象,进行分组。 */ Map<String, List<ExcelCells>> map = new LinkedHashMap<String, List<ExcelCells>>();// for (ExcelCells cell : each) { String[] array = cell.getCell().getContents().trim().split("\\."); if (array.length >= 3) { List<ExcelCells> list = map.get(array[0] + "." + array[1]); if (list == null) { list = new ArrayList<ExcelCells>(); map.put(array[0] + "." + array[1], list); } list.add(cell); } } Iterator<String> iterator = map.keySet().iterator(); int insertrow = 0;//标识当前工作表新增了多少条数据。 int lastSheetIndex = -1;//标识上一次工作表的下标。 while (iterator.hasNext()) { List<ExcelCells> list = map.get(iterator.next()); int sheetIndex = list.get(0).getSheetIndex();// 获取面板下标。 //当切换工作表事 insertrow 清 0 if(lastSheetIndex != -1 && lastSheetIndex != sheetIndex) insertrow = 0; lastSheetIndex = sheetIndex; int startRow = list.get(0).getCell().getRow() + insertrow;// 获取开始行下标。 String[] array = list.get(0).getCell().getContents().trim().split("\\."); if (array.length > 0) { Object data = datas.get(array[1]); if (data != null && !data.getClass().getName().equals(List.class.getName()) && !data.getClass().getName().equals(ArrayList.class.getName())) { throw new Exception("数据:" + array[1] + "不是一个集合类!"); } List<Object> rowsData = (List<Object>) data; // 有数据时。 if (rowsData != null && rowsData.size() > 0) { for (int i = 0; i < rowsData.size(); i++) { /* 第一行数据,覆盖模板位置,所以不需要创建新行 */ if (i == 0) { for (ExcelCells cell : list) { wWorkbook.getSheet(sheetIndex).addCell(getValueByEach(cell, rowsData.get(i), startRow, cell.getCell().getColumn())); } continue; } /* 创建新行 */ wWorkbook.getSheet(sheetIndex).insertRow(startRow + i); for (ExcelCells cell : list) { wWorkbook.getSheet(sheetIndex).addCell(getValueByEach(cell, rowsData.get(i), startRow + i, cell.getCell().getColumn())); } insertrow++; } } // 无数据时。 else { for (ExcelCells cell : list) { wWorkbook.getSheet(sheetIndex).addCell(getValueByEach(cell, null, startRow, cell.getCell().getColumn())); } } } } } /** * 根据【表达式】从数据集中获取相应数据。 * * @param exp * 表达式 * @param datas * 数据集 * @return */ public static WritableCell getValueByExp(ExcelCells cells, Map<String, Object> datas) { WritableCell writableCell = null; List<Object> values = new ArrayList<Object>(); List<String> exps = cells.getExps();// 获取表达式集合。 String old_c = cells.getCell().getContents();// 模板原内容。 for (String exp : exps) { String[] names = exp.replace("${", "").replace("}", "").split("\\."); Object object = null; for (String name : names) { if (object == null) object = ObjectCustomUtil.getValueByFieldName(name, datas); else object = ObjectCustomUtil.getValueByFieldName(name, object); } // ${asd.sdfa} if (!old_c.isEmpty()) { while (old_c.indexOf(exp) != -1) old_c = old_c.replace(exp, object.toString()); } } writableCell = getWritableCellByObject(cells.getCell().getRow(), cells.getCell().getColumn(), old_c); writableCell.setCellFormat(cells.getCell().getCellFormat()); return writableCell; } /* * 这个方法是专门用于驻外机组环境卫生检查 */ public static WritableCell getValueByExp1(ExcelCells cells, Map<String, Object> datas) { WritableCell writableCell = null; List<Object> values = new ArrayList<Object>(); List<String> exps = cells.getExps();// 获取表达式集合。 String old_c = cells.getCell().getContents();// 模板原内容。 for (String exp : exps) { String[] names = exp.replace("${", "").replace("}", "").split("\\."); Object object = null; String checkContentValue = ""; for (String name : names) { if (object == null){ object = ObjectCustomUtil.getValueByFieldName(name, datas); }else{ object = ObjectCustomUtil.getValueByFieldName(name, object); } if(name.indexOf("checkContent")!=-1){ if("0".equals(object.toString())){ checkContentValue = "符合"; }else if("1".equals(object.toString())){ checkContentValue = "不符合"; }else{ checkContentValue = "未检查"; } }else if(name.indexOf("checkTime")!=-1){ Date date = (Date)object; checkContentValue = date.getYear()+"年"+ (date.getMonth()+1) +"月" +date.getDate(); } } if (!old_c.isEmpty()) { while (old_c.indexOf(exp) != -1){ if("".equals(checkContentValue)){ old_c = old_c.replace(exp, object.toString()); }else{ old_c = old_c.replace(exp, checkContentValue); } } } } writableCell = getWritableCellByObject(cells.getCell().getRow(), cells.getCell().getColumn(), old_c); writableCell.setCellFormat(cells.getCell().getCellFormat()); return writableCell; } /** * 根据【Each表达式】从数据集中获取相应数据。 * * @param exp * 表达式 * @param datas * 数据集 * @return */ public static WritableCell getValueByEach(ExcelCells cells, Object datas, int rows, int column) { WritableCell writableCell = null; if (datas != null) { List<Object> values = new ArrayList<Object>(); String[] exps = cells.getCell().getContents().trim().split("\\.");// 获取表达式集合。 Object object = null; for (int i = 2; i < exps.length; i++) { if (object == null) object = ObjectCustomUtil.getValueByFieldName(exps[i], datas); else object = ObjectCustomUtil.getValueByFieldName(exps[i], object); } writableCell = getWritableCellByObject(rows, column, object); } else { writableCell = getWritableCellByObject(rows, column, null); } writableCell.setCellFormat(cells.getCell().getCellFormat()); return writableCell; } /** * 【未实现】 * * @param beginRow * @param beginColumn * @param heads * @param result * @return */ public static synchronized String customExportExcel(int beginRow, int beginColumn, Map heads, List result) { return null; } /** * 根据提供的【列标】、【行标】、【对象值】构建一个Excel列对象。 * * @param beginRow * 【行标】 * @param beginColumn * 【列标】 * @param obj * 【对象值】 * @return */ public static WritableCell getWritableCellByObject(int beginRow, int beginColumn, Object obj) { WritableCell cell = null; if (obj == null) return new Label(beginColumn, beginRow, ""); if (obj.getClass().getName().equals(String.class.getName())) { cell = new Label(beginColumn, beginRow, obj.toString()); } else if (obj.getClass().getName().equals(int.class.getName()) || obj.getClass().getName().equals(Integer.class.getName())) { // jxl.write.Number cell = new Number(beginColumn, beginRow, Integer.parseInt(obj.toString())); } else if (obj.getClass().getName().equals(float.class.getName()) || obj.getClass().getName().equals(Float.class.getName())) { cell = new Number(beginColumn, beginRow, Float.parseFloat(obj.toString())); } else if (obj.getClass().getName().equals(double.class.getName()) || obj.getClass().getName().equals(Double.class.getName())) { cell = new Number(beginColumn, beginRow, Double.parseDouble(obj.toString())); } else if (obj.getClass().getName().equals(long.class.getName()) || obj.getClass().getName().equals(Long.class.getName())) { cell = new Number(beginColumn, beginRow, Long.parseLong(obj.toString())); } else if (obj.getClass().getName().equals(Date.class.getName())) { cell = new DateTime(beginColumn, beginRow, (Date)obj); } else { cell = new Label(beginColumn, beginRow, obj.toString()); } return cell; } /** * 查找某字符第一次出现的位置。 * * @param text * 【文本】 * @param book * 【Excel对象】 * @return */ public static ExcelCells searchFirstText(String text, Workbook book) { ExcelCells Rcell = null; Sheet[] sheets = book.getSheets(); if (sheets != null) { int sheetIndex = 0; for (Sheet sheet : sheets) { if (sheet != null) { int rows = sheet.getRows(); if (rows > 0) { for (int i = 0; i < rows; i++) { Cell[] cells = sheet.getRow(i); if (cells != null) { for (Cell cell : cells) { if (cell != null && !StringUtils.isNull(cell.getContents())) { String contents = cell.getContents(); if (contents.equals(text)) return new ExcelCells(sheet, cell, sheetIndex); } } } } } } sheetIndex++; } } return Rcell; } /** * 查找包含某字符所有的列对象。 * * @param text * 【文本】 * @param book * 【Excel对象】 * @return */ public static List<ExcelCells> search(String text, Workbook book) { List<ExcelCells> rcells = new ArrayList<ExcelCells>(); Sheet[] sheets = book.getSheets(); if (sheets != null) for (Sheet sheet : sheets) { if (sheet != null) { int rows = sheet.getRows(); if (rows > 0) { for (int i = 0; i < rows; i++) { Cell[] cells = sheet.getRow(i); if (cells != null) { for (Cell cell : cells) { if (cell != null && !StringUtils.isNull(cell.getContents())) { String contents = cell.getContents(); if (contents.indexOf(text) != -1) rcells.add(new ExcelCells(sheet, cell)); } } } } } } } return rcells; }}
复制代码

DateTool.java

复制代码
package com.hna.aircrewhealth.excel.utils;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public class DateTool {    public static Date parse(String string) {        try {            DateFormat format = DateFormat.getDateInstance();            return format.parse(string);        } catch (ParseException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return null;    }    /**     * 获取当前日期时间     *      * @return     */    public static String getTodayTime() {        Date sellTime = new Date();        Calendar cal = Calendar.getInstance();        cal.setTime(sellTime);        System.out.println(cal.toString());        DateFormat format = DateFormat.getDateInstance();        System.out.println(format.format(sellTime));        return null;    }    /**     * 获取当天日期(短日期)     *      * @return     */    public static String getTodayDate() {        Date sellTime = new Date();        SimpleDateFormat dateformat1 = new SimpleDateFormat("yyyy-MM-dd");        return dateformat1.format(sellTime);    }    public static String getMonth_day(Date date, String str) {        if (str == null)            str = "/";        Calendar cal = Calendar.getInstance();        cal.setTime(date);        return (cal.get(Calendar.MONTH) + 1) + str + cal.get(Calendar.DAY_OF_MONTH);    }    /**     * 获取当天日期(长日期)     *      * @return     */    public static String getTodayDateLong() {        Date sellTime = new Date();        SimpleDateFormat dateformat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        return dateformat1.format(sellTime);    }    /**     * 获取当前年份     *      * @author zl 2011-10-24     * @return     */    public static int currentYear() {        Calendar cal = Calendar.getInstance();        int year = cal.get(Calendar.YEAR);        // int month = cal.get(Calendar.MONTH )+1;        // System.out.println(year + " 年 " + month + " 月");        return year;    }    /**     * 将日期格式化     *      * @param date     * @param arg     * @return     */    public static String format(Date date, String arg) {        if (date == null)            return null;        if (arg == null)            arg = "yyyy-MM-dd HH:mm:ss";        SimpleDateFormat sdf = new SimpleDateFormat(arg);        return sdf.format(date);    }    public static Date stringToDate(String str) throws ParseException {        if (str.split("-").length == 2) {            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");            return sdf.parse(str);        } else if(str.split("-").length == 1){             SimpleDateFormat sdf = new SimpleDateFormat("yyyy");            return sdf.parse(str);        } else{            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");            return sdf.parse(str);        }    }    //计算俩个日期之间有多少天    public static int countDays(String begin,String end){          int days = 0;                    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");          Calendar c_b = Calendar.getInstance();          Calendar c_e = Calendar.getInstance();                    try{           c_b.setTime(df.parse(begin));           c_e.setTime(df.parse(end));                      while(c_b.before(c_e)){            days++;            c_b.add(Calendar.DAY_OF_YEAR, 1);           }                     }catch(ParseException pe){           System.out.println("日期格式必须为:yyyy-MM-dd;如:2010-4-4.");          }                    return days;         }         //计算当前距离当前日期之后的某个日期    public static String addCalendarDay(Date calDate, long addDate) {        long time = calDate.getTime();        addDate = addDate * 24 * 60 * 60 * 1000;        time += addDate;        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        return dateFormat.format(new Date(time));    }        public static Date addDay(Date calDate, long addDate) {        long time = calDate.getTime();        addDate = addDate * 24 * 60 * 60 * 1000;        time += addDate;        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        return new Date(time);    }        //计算距离执行日期提前多少天的日期    public static Date reduceDay(Date calDate, long addDate) {        long time = calDate.getTime();        addDate = addDate * 24 * 60 * 60 * 1000;        time -= addDate;        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        return new Date(time);    }    public static void main(String[] args) {        // TODO Auto-generated method stub        // DateTool.getTodayTime();        // DateTool.currentYear();        try {            //System.out.println(DateTool.stringToDate("2001-10-10"));            Date date=new Date();            System.out.println(DateTool.addCalendarDay(date,1));            //System.out.println(DateTool.countDays("2012-4-10","2012-4-24"));                    } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
复制代码

日期类型的转换哈

ExcelCells.java

复制代码
package com.hna.aircrewhealth.excel.utils;import java.util.ArrayList;import java.util.List;import jxl.Cell;import jxl.Sheet;public class ExcelCells {    public final static String regex = "\\$\\{[^\\}]+\\}";    private Sheet sheet ;    private Cell cell ;    private int sheetIndex;        public ExcelCells(){}    public ExcelCells(Sheet sheet,Cell cell){        this.sheet = sheet;        this.cell = cell;    }    public ExcelCells(Sheet sheet,Cell cell,int sheetIndex){        this.sheet = sheet;        this.cell = cell;        this.sheetIndex = sheetIndex;    }        public Sheet getSheet() {        return sheet;    }    public void setSheet(Sheet sheet) {        this.sheet = sheet;    }    public Cell getCell() {        return cell;    }    public void setCell(Cell cell) {        this.cell = cell;    }    public int getSheetIndex() {        return sheetIndex;    }    public void setSheetIndex(int sheetIndex) {        this.sheetIndex = sheetIndex;    }    /**     * 获取当前列当中【表达式】集合     * @return     */    public List<String> getExps(){        List<String> list = new ArrayList<String>();        if(this.cell!=null){            String contents = this.cell.getContents();            if(!contents.isEmpty()){                list = StringUtils.search(this.regex, contents);            }        }        return list;    }        public String getFomatContext(){        String contents = this.cell.getContents();        //while(contents.)        return contents;    }    }
复制代码

ExcelTemplate.java

复制代码
package com.hna.aircrewhealth.excel.utils;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class ExcelTemplate {    private List heads = new ArrayList();//模型表头    private List eachs = new ArrayList();//模型表数据    private List beans = new ArrayList();//一般的数据集合    }
复制代码

FileTool.java

复制代码
package com.hna.aircrewhealth.excel.utils;import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.URL;import javax.servlet.http.HttpServletResponse;public class FileTool {    public static File createfile(String path) {        File file = new File(path);        return file;    }    public static boolean isExist(String path) {        File file = new File(path);        return file.exists();    }    public static InputStream getFileInputStream(String path) {        try {            if (isExist(path)) {                InputStream is = new FileInputStream(path);                return is;            }        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return null;    }    public static void downLoad(String filePath, HttpServletResponse response, boolean isOnLine, String newname) throws Exception {        File f = new File(filePath);        if (!f.exists()) {            response.sendError(404, "File not found!");            return;        }        BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));        byte[] buf = new byte[1024];        int len = 0;        response.reset(); // 非常重要        if (isOnLine) { // 在线打开方式            URL u = new URL("file:///" + filePath);            response.setContentType(u.openConnection().getContentType());            response.setHeader("Content-Disposition", "inline; filename=" + new String(newname.getBytes("gb2312"), "iso8859-1"));            // 文件名应该编码成UTF-8        } else { // 纯下载方式            response.setContentType("application/x-msdownload");            response.setHeader("Content-Disposition", "attachment; filename=" + new String(newname.getBytes("gb2312"), "iso8859-1"));        }        OutputStream out = response.getOutputStream();        while ((len = br.read(buf)) > 0)            out.write(buf, 0, len);        br.close();        out.close();    }    public static void downLoad(InputStream f, HttpServletResponse response, String newname) throws Exception {        if (f == null) {            response.sendError(404, "File not found!");            return;        }        BufferedInputStream br = new BufferedInputStream(f);        byte[] buf = new byte[1024];        int len = 0;        response.reset(); // 非常重要        // 纯下载方式        response.setContentType("application/x-msdownload");        response.setHeader("Content-Disposition", "attachment; filename=" + newname);        OutputStream out = response.getOutputStream();        while ((len = br.read(buf)) > 0)            out.write(buf, 0, len);        br.close();        out.close();    }    /**     * 在线看文件     *      * @param filePath     * @param fileType     * @param response     * @param newname     * @throws Exception     */    public static void viewfile(String filePath, String ContentType, HttpServletResponse response, String newname) throws Exception {        File f = new File(filePath);        if (!f.exists()) {            response.sendError(404, "File not found!");            return;        }        BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));        byte[] buf = new byte[1024];        int len = 0;        response.reset(); // 非常重要        // 在线打开方式        URL u = new URL("file:///" + filePath);        // response.setContentType(u.openConnection().getContentType());        response.setContentType(ContentType);        // response.setContentType("application/vnd.ms-excel; charset=gb2312");        response.setHeader("Content-Disposition", "inline; filename=" + new String(newname.getBytes("gb2312"), "iso8859-1"));        OutputStream out = response.getOutputStream();        while ((len = br.read(buf)) > 0)            out.write(buf, 0, len);        br.close();        out.close();    }    /**     * 把文本编码为Html代码     *      * @param target     * @return 编码后的字符串     */    public static String htmEncode(String target) {        StringBuffer stringbuffer = new StringBuffer();        int j = target.length();        for (int i = 0; i < j; i++) {            char c = target.charAt(i);            switch (c) {            case 60:                stringbuffer.append("&lt;");                break;            case 62:                stringbuffer.append("&gt;");                break;            case 38:                stringbuffer.append("&amp;");                break;            case 34:                stringbuffer.append("&quot;");                break;            case 169:                stringbuffer.append("&copy;");                break;            case 174:                stringbuffer.append("&reg;");                break;            case 165:                stringbuffer.append("&yen;");                break;            case 8364:                stringbuffer.append("&euro;");                break;            case 8482:                stringbuffer.append("&#153;");                break;            case 13:                if (i < j - 1 && target.charAt(i + 1) == 10) {                    stringbuffer.append("<br>");                    i++;                }                break;            case 32:                if (i < j - 1 && target.charAt(i + 1) == ' ') {                    stringbuffer.append(" &nbsp;");                    i++;                    break;                }            default:                stringbuffer.append(c);                break;            }        }        return new String(stringbuffer.toString());    }    public static void main(String[] arg) {        File file = new File("F:\\js\\json_parse.js");        BakFile(file);    }    /**     * 备份一个文件     *      * @param file     */    public static void BakFile(File file) {        if (file.isFile()) {            String filename = file.getName();            String p = file.getParent();            String newfilename = p + "\\bak." + filename;                        File bakfile = createfile(newfilename);            CopyFile(file, bakfile);        }    }    public static void CopyFile(File oldFile, File newFile) {        FileInputStream input = null;        FileOutputStream output = null;        try {            input = new FileInputStream(oldFile);            output = new FileOutputStream(newFile);            byte[] buffer = new byte[4096];            int n = 0;            while (-1 != (n = input.read(buffer))) {                output.write(buffer, 0, n);            }        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } finally {            try {                if (input != null) {                    input.close();                }                if (output != null) {                    output.close();                }            } catch (IOException ioe) {                // ignore            }        }    }        public static void CompressJS(File file,String newname){        //        Runtime.getRuntime().exec(commandStr)    }}
复制代码

ObjectCustomUtil.java

复制代码
package com.hna.aircrewhealth.excel.utils;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.math.BigDecimal;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;public class ObjectCustomUtil {    public static Field[] getAllFields(Class cl) {        Field[] field = cl == null ? null : cl.getDeclaredFields();        return field;    }    public static Field getFieldByName(Class cl, String name) throws Exception {        if (name == null || name.equals(""))            return null;        Field field = cl == null ? null : cl.getDeclaredField(name);        return field;    }    /**     * 根据属性对象获取属性值     *      * @param field     * @param obj     * @return     */    public static Object getValueByField(Field field, Object obj) {        Object result = null;        try {            String name = field.getName();            String stringLetter = name.substring(0, 1).toUpperCase();            String getName = "get" + stringLetter + name.substring(1);            Method getmethod0 = obj.getClass().getMethod(getName);            result = getmethod0.invoke(obj);        } catch (SecurityException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IllegalArgumentException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (NoSuchMethodException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IllegalAccessException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (InvocationTargetException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return result;    }    /**     * 根据属性名称获取属性值     *      * @param name     * @param obj     * @return     */    public static Object getValueByFieldName(String name, Object obj) {        Object result = null;        try {            if (obj.getClass().getName().equals(Map.class.getName()) || obj.getClass().getName().equals(HashMap.class.getName())) {                return ((Map) obj).get(name);            }            String stringLetter = name.substring(0, 1).toUpperCase();            String getName = "get" + stringLetter + name.substring(1);            Method getmethod0 = obj.getClass().getMethod(getName);            result = getmethod0.invoke(obj);        } catch (SecurityException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IllegalArgumentException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (NoSuchMethodException e) {            // TODO Auto-generated catch block        } catch (IllegalAccessException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (InvocationTargetException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return result;    }    /**     * 根据属性,给对象赋值     *      * @param name     * @param obj     * @return     */    public static Object setValueByField(Field field, Object bean, Object value) {        Object result = null;        try {            String name = field.getName();            String stringLetter = name.substring(0, 1).toUpperCase();            String setName = "set" + stringLetter + name.substring(1);            Method method = bean.getClass().getMethod(setName, field.getType());            if (method != null) {                if (value.getClass().getName().equals("org.json.JSONObject$Null")) {                } else if (field.getType().getName().equals(String.class.getName())) {                    method.invoke(bean, value.toString());                } else if (field.getType().getName().equals(int.class.getName()) || field.getType().getName().equals(Integer.class.getName())) {                    method.invoke(bean, Integer.parseInt(StringUtils.isNull(value.toString()) ? "0" : value.toString()));                } else if (field.getType().getName().equals(float.class.getName()) || field.getType().getName().equals(Float.class.getName())) {                    method.invoke(bean, Float.parseFloat(StringUtils.isNull(value.toString()) ? "0" : value.toString()));                } else if (field.getType().getName().equals(double.class.getName()) || field.getType().getName().equals(Double.class.getName())) {                    method.invoke(bean, Double.parseDouble(StringUtils.isNull(value.toString()) ? "0" : value.toString()));                } else if (field.getType().getName().equals(long.class.getName()) || field.getType().getName().equals(Long.class.getName())) {                    method.invoke(bean, Long.parseLong(StringUtils.isNull(value.toString()) ? "0" : value.toString()));                } else if (field.getType().getName().equals(Date.class.getName())) {                    method.invoke(bean, StringUtils.isNull(value.toString()) ? null : DateTool.parse(value.toString()));                } else if (field.getType().getName().equals(BigDecimal.class.getName())) {                    method.invoke(bean, StringUtils.isNull(value.toString()) ? null : BigDecimal.valueOf(Double.parseDouble(value.toString())));                } else {                    method.invoke(bean, value);                }            }            return bean;        } catch (SecurityException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IllegalArgumentException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (NoSuchMethodException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IllegalAccessException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (InvocationTargetException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return result;    }    public static String getSimpleNameByClassName(String classname) {        try {            return Class.forName(classname).getSimpleName();        } catch (ClassNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return null;    }    public static void main(String[] arg) {        // Field[] fields = getAllFields(Aircrafttype.class);        //        // for (Field f : fields) {        // System.out.println("name=\"" + f.getName() + "\"");        // }        // Aircrafttype arg0 = new Aircrafttype();        // arg0.setAircraftModel("aaa");        // arg0.setAircrafttypeId(1234);        //        // Aircrafttype arg1 = new Aircrafttype();        // // arg1.setAircraftModel("aaa");        // arg1.setAircrafttypeId(1235);        // // arg0.getAircraftSize()        // copyNotNull(arg0, arg1);        // try {        // // System.out.println(ObjectPropertyCompare(arg0, arg1));        // } catch (Exception e) {        // // TODO Auto-generated catch block        // e.printStackTrace();        // }    }    /**     * 对象属性比较,确保两对象属于同一类型     *      * @param arg0     * @param arg1     * @return     */    public static List<String> ObjectPropertyCompare(Object arg0, Object arg1) throws Exception {        List<String> result = null;        if (!arg0.getClass().getName().equals(arg1.getClass().getName())) {            throw new Exception("两个对象不是同一类型,没法比较");        }        Field[] fields = getAllFields(arg0.getClass());        if (fields != null && fields.length > 0)            result = new ArrayList<String>();        for (Field f : fields) {            String name = f.getName();            String stringLetter = name.substring(0, 1).toUpperCase();            String getName = "get" + stringLetter + name.substring(1);            Method method = arg0.getClass().getMethod(getName);            Object value0 = method.invoke(arg0);            Object value1 = method.invoke(arg1);            if (value0 == null && value1 == null) {            } else if (value0 == null && value1 != null) {                if (value1.getClass().getName().equals(String.class.getName())) {                    if (StringUtils.isNull(value1.toString())) {                        continue;                    }                }                result.add(name);            } else if (value0 != null && value1 == null) {                if (value0.getClass().getName().equals(String.class.getName())) {                    if (StringUtils.isNull(value0.toString())) {                        continue;                    }                }                result.add(name);            } else if (!value0.equals(value1))                result.add(name);        }        return result;    }    /**     * 对象属性复制(只为为空的属性复制)     *      * @param arg0     *            被复制对象     * @param arg1     *            复制原对象     * @return     */    public static Object copyNotNull(Object arg0, Object arg1) {        // arg1.getClass().getDeclaredFields();        Field[] fields = getAllFields(arg1.getClass());        try {            for (Field f : fields) {                String typename = f.getType().getName();                Field f0 = null;                try {                    f0 = arg0.getClass().getDeclaredField(f.getName());                } catch (NoSuchFieldException e) {                    continue;                }                String name = f.getName();                String stringLetter = name.substring(0, 1).toUpperCase();                String getName = "get" + stringLetter + name.substring(1);                String setName = "set" + stringLetter + name.substring(1);                try {                    Method setmethod1 = arg1.getClass().getMethod(setName, f.getType());                    Method getmethod1 = arg1.getClass().getMethod(getName);                    Method getmethod0 = arg0.getClass().getMethod(getName);                    if (typename.equals(int.class.getName()) || typename.equals(Integer.class.getName()) || typename.equals(float.class.getName()) || typename.equals(Float.class.getName()) || typename.equals(double.class.getName()) || typename.equals(Double.class.getName())) {                        if (getmethod1.invoke(arg1).equals(0) && f0 != null && f.getType().getName().equals(f0.getType().getName())) {                            setmethod1.invoke(arg1, getmethod0.invoke(arg0));                        }                    } else if (getmethod1.invoke(arg1) == null) {                        if (f0 != null && f.getType().getName().equals(f0.getType().getName())) {                            setmethod1.invoke(arg1, getmethod0.invoke(arg0));                        }                    }                } catch (NoSuchMethodException e) {                    // TODO Auto-generated catch block                    // e.printStackTrace();                }            }        } catch (SecurityException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IllegalArgumentException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IllegalAccessException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (InvocationTargetException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        // System.out.println("");        return arg1;    }}
复制代码

StringUtils.java

 

复制代码
package com.hna.aircrewhealth.excel.utils;import java.util.ArrayList;import java.util.List;import java.util.UUID;import java.util.regex.Matcher;import java.util.regex.Pattern;public class StringUtils {    /**     * 查找一个字符串在数组中的索引值     *      * @param data     * @param string     * @return     */    public static int searchIndex(String[] data, String string) {        if (data == null || data.length == 0)            return -1;        for (int i = 0; i < data.length; i++) {            if ((data[i] != null && data[i].equals(string)) || (data[i] == null && string == null)) {                return i;            }        }        return -1;    }    public static boolean isNull(String string) {        if (string == null || string.equals(""))            return true;        return false;    }    public static String arrayToString(List<String> list, String split) {        if (list == null || list.size() == 0)            return null;        String result = "";        if (isNull(split))            split = ",";        for (String str : list) {            result += str + split;        }        result = result.substring(0, result.length() - 1);        return result;    }    public static String arrayToString(String[] list, String split) {        if (list == null || list.length == 0)            return null;        String result = "";        if (isNull(split))            split = ",";        for (String str : list) {            result += str + split;        }        result = result.substring(0, result.length() - 1);        return result;    }    public static String getFileName(String name) {        if (isNull(name))            return null;        if (name.lastIndexOf("\\") != -1) {            name = name.substring(name.lastIndexOf("\\") + 1, name.length());        } else if (name.lastIndexOf("/") != -1) {            name = name.substring(name.lastIndexOf("/") + 1, name.length());        }        return name;    }    public static String getExtensionName(String name) {        if (isNull(name))            return null;        if (name.lastIndexOf(".") != -1) {            return name.substring(name.lastIndexOf(".") + 1);        }        return "";    }    public static void main(String[] arg0) {        String a = "${bean.aid} sdfad ${xx.yy}sfdd";        String regex = "";        search(regex, a);    }    public static String getUID() {        return UUID.randomUUID().toString().replaceAll("-", "");    }    /**     * 查找【正则表达式】描述的内容。     * @param regex     * @param string     * @return     */    public static List<String> search(String regex, String string) {        List<String> list = new ArrayList<String>();        Pattern p = Pattern.compile(regex);        Matcher m = p.matcher(string);        while (m.find()) {            String g = m.group();            list.add(g);        }        return list;    }}
复制代码

代码贴完了,至于下载

下面是我自己写的可以参照 一下,Excel生成并下载

ccAction.java 方法

复制代码
@RequestMapping(params = "method=InitExport", method = RequestMethod.GET)    public @ResponseBody String InitExport(HttpServletRequest request,HttpServletResponse response) throws UnsupportedEncodingException, JSONException{        String parameter=URLDecoder.decode(request.getParameter("parameter"),"UTF-8");         JSONObject jsonObj=new JSONObject(parameter);        Map<String,Object> map=new HashMap<String,Object>();        String path = request.getSession().getServletContext().getRealPath("/")+ "ExcelTemplate" +"\\招飞初检.xls";        Physical physical=new Physical();        physical.setCompany(jsonObj.get("company").toString());        physical.setDateTimes(jsonObj.get("dateTime").toString());//        String area= hnabaseCityBO.findoneById(jsonObj.get("area").toString()).getBaseChn();        physical.setArea(jsonObj.optString("area"));//        physical.setRealNumber(jsonObj.get("realNumber").toString());        physical.setPassNumber(jsonObj.get("passNumber").toString());        physical.setEndYield(jsonObj.get("endYield").toString());        physical.setDoctors(jsonObj.get("doctorInit").toString());//        physical.setComment(jsonObj.get("comment").toString());        map.put("physical", physical);//        ExcelTool.exportExcel(path, map);        OutputStream out=null;        BufferedOutputStream bos=null;        BufferedInputStream bis=null;        InputStream in=null;        try{        in=ExcelTool.exportExcel(path, map);        bis=new BufferedInputStream(in);        response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode("招飞初检.xls", "UTF-8"));//设置头文件  可参照 http://blog.csdn.net/fanyuna/article/details/5568089        byte[] data=new byte[1024];        int bytes=0;        out=response.getOutputStream();        bos=new BufferedOutputStream(out);        while((bytes=bis.read(data, 0, data.length))!=-1){            bos.write(data,0,bytes);                                        //写出文件流                                             }        bos.flush();        }catch(Exception e){            e.printStackTrace();        }finally{            try {                bos.close();                out.close();                bis.close();                in.close();            } catch (IOException e) {                e.printStackTrace();            }                    }        return "success";            }
复制代码

其中有一个循环的,下面代码也给出来吧

 

 each代表循环

完整实例和Excel模板下载地址:http://download.csdn.net/detail/dawnsun2013/6723789

0 0