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

    代码完毕!

     

    宝贝网址:

  • 相关阅读:
    移动端通过js来用rem控制字体大小的用法
    移动端字体大小自动缩放css样式控制
    meta
    兔子生兔子问题
    CSS hack
    为对象添加一个新的方法
    js实现菜单切换
    Node.js基础学习(第三幕)
    Node.js基础学习(第二幕)
    C#通用公共类库ZXNetStandardDepot.Common
  • 原文地址:https://www.cnblogs.com/W203654/p/2472078.html
Copyright © 2011-2022 走看看