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

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

使用的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代表循环

代码完毕!


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值