zoukankan      html  css  js  c++  java
  • 根据Excel模板导出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代表循环

    代码完毕!

     

    宝贝网址:

  • 相关阅读:
    每天一道LeetCode--141.Linked List Cycle(链表环问题)
    每天一道LeetCode--119.Pascal's Triangle II(杨辉三角)
    每天一道LeetCode--118. Pascal's Triangle(杨辉三角)
    CF1277D Let's Play the Words?
    CF1281B Azamon Web Services
    CF1197D Yet Another Subarray Problem
    CF1237D Balanced Playlist
    CF1239A Ivan the Fool and the Probability Theory
    CF1223D Sequence Sorting
    CF1228D Complete Tripartite
  • 原文地址:https://www.cnblogs.com/W203654/p/2472078.html
Copyright © 2011-2022 走看看