页面

<div class="col-sm-3" >
   <a class="btn btn-primary btn-large btn-block" id="export" >导出采购单</a>
</div>
$("#export").click(function (){
   var v_frameworkName= $("#ordersearchFrameworkName").val()==null?"":$("#ordersearchFrameworkName").val();
   var v_orderName= $("#ordersearchMediaName").val()==null?"":$("#ordersearchMediaName").val();
   var v_providerName= $("#ordersearchProviderName").val()==null?"":$("#ordersearchProviderName").val();
   var v_discountMethod= $("#ordersearchDiscountMethod").val()==null?"":$("#ordersearchDiscountMethod").val();
   var v_searchWealthAccount= $("#ordersearchWealthAccount").val()==null?"":$("#ordersearchWealthAccount").val();
   var v_date = $("#orderdate").val() == null ? "" : $("#orderdate").val();
   var searchUrl = "/saleQuery1/export-do?frameworkName=" + v_frameworkName + "&mediaName=" + v_orderName + "&providerName=" + v_providerName + "&discountMethod=" + v_discountMethod + "&wealthAccount=" + v_searchWealthAccount + "&date=" + v_date;
   window.open(searchUrl);
});




Java


//    orders
   @RequestMapping(value = "/export-do")
   @ResponseBody
   public void exportExcle(Model model,
                           HttpServletRequest request,
                           HttpServletResponse response,
                           @RequestParam(value = "frameworkName", required = false) String frameworkName,
                           @RequestParam(value = "mediaName", required = false) String mediaName,
                           @RequestParam(value = "providerName", required = false) String providerName,
                           @RequestParam(value = "discountMethod", required = false) String discountMethod,
                           @RequestParam(value = "wealthAccount", required = false) String wealthAccount,
                           @DateTimeFormat(pattern = "MM/dd/yyyy") @RequestParam(value = "date", required = false) Date date) {
       JsonOrders jsonListResults = new JsonOrders();
       if (StringUtils.equals("ALL", discountMethod)) {
           discountMethod = null;
       }
       jsonListResults = orderService.listOrder(1, 100000, "id", "desc",date, null, frameworkName, mediaName, providerName, discountMethod, wealthAccount);
       try {
           List<JsonOrder> orderList= jsonListResults.getRows().stream().peek(order -> {
               if (StringUtils.isNotEmpty(order.getDiscountMethod())) {
                   if (StringUtils.equalsIgnoreCase(order.getDiscountMethod(), "REBATE")) {
                       order.setDiscountMethodStr("返点");
                   } else {
                       order.setDiscountMethodStr("折扣");
                   }
               }
               if (StringUtils.equalsIgnoreCase(order.getStatus(), "SUBMITED")) {
                   order.setStatusStr("待审核");
               } else if (StringUtils.equalsIgnoreCase(order.getStatus(), "FPASS")) {
                   order.setStatusStr("待付款");
               } else if (StringUtils.equalsIgnoreCase(order.getStatus(), "SPASS")) {
                   order.setStatusStr("待确认");
               }else if (StringUtils.equalsIgnoreCase(order.getStatus(), "NPASS")) {
                   order.setStatusStr("审核不通过");
               } else if (StringUtils.equalsIgnoreCase(order.getStatus(), "TPASS")) {
                   order.setStatusStr("启用");
               } else if (StringUtils.equalsIgnoreCase(order.getStatus(), "PASSFM")) {
                   order.setStatusStr("已收款");
               } else if (StringUtils.equalsIgnoreCase(order.getStatus(), "DISABLE")) {
                   order.setStatusStr("停用");
               } else if (StringUtils.equalsIgnoreCase(order.getStatus(), "COMPLETE")) {
                   order.setStatusStr("完成");
               } else{
                   order.setStatusStr("");
               }
           }).collect(Collectors.toList());
           jsonListResults.getRows().clear();
           jsonListResults.getRows().addAll(orderList);
           File file = ExcelUtil.write(Paths.get("/tmp/", new DateTime().toString("yyyy-MM-dd")+ RandomStringUtils.randomNumeric(6)+".xls"),
                   Lists.newArrayList("frameworkName", "mediaName", "providerName", "wealthAccount", "discountMethodStr", "discountMedia", "discountProvider", "recharge", "rechargeTime", "statusStr"),
                   Lists.newArrayList("业务名称", "媒体", "供应商", "加款账号", "优惠方式", "媒体优惠", "代理商优惠", "到账金额", "到账时间", "状态"),
                   Lists.newArrayList("","","","","","#,#0.00","#,#0.00","#,#0.00","yyyy/m/d",""),
                   jsonListResults.getRows());
           downloadExcle(request, response, file);
       } catch (Exception e) {
           if (logger.isErrorEnabled()) {
               logger.error("exportExcle", e);
           }
           fileNotFound(request, response);
       }
   }




public class JsonOrders extends BaseJson {

   /**
    *
    */

   int currentPage = 1;
   int totalPages;
   int totalRecords;
   private List<JsonOrder> rows;

   public int getCurrentPage() {
       return currentPage;
   }

   public void setCurrentPage(int currentPage) {
       this.currentPage = currentPage;
   }

   public int getTotalPages() {
       return totalPages;
   }

   public void setTotalPages(int totalPages) {
       this.totalPages = totalPages;
   }

   public int getTotalRecords() {
       return totalRecords;
   }

   public void setTotalRecords(int totalRecords) {
       this.totalRecords = totalRecords;
   }

   public List<JsonOrder> getRows() {
       if (rows == null) {
           rows = new ArrayList<JsonOrder>();
       }
       return rows;
   }

   public void setRows(List<JsonOrder> rows) {
       this.rows = rows;
   }
}




public class JsonOrder extends BaseJson {

   /**
    *
    */

   private String frameworkName;
   private String mediaName;
   private String providerName;
   private String wealthAccount;
   private String discountMethod;
   private BigDecimal discountMedia;
   private BigDecimal discountProvider;
   private BigDecimal cost;
   private BigDecimal recharge;
   private Date rechargeTime;
   private Date payTime;
   private long mediaId;
   private Date BUApprove;
   private Date fianceApprove;
   private Date finalApprove;
   private String status;


   private String statusStr;
   private String discountMethodStr;

   private String urgent;


。。。。。。。。。。。。。。。。。


public abstract class BaseJson implements Serializable {
   /**
    *
    */
   private static final long serialVersionUID = 5201899209821687086L;

   private long id;

   private boolean disabled;
   private boolean deleted;
   private Date dateCreated;
   private Date lastModified;
   private String remark;

   private int sortOrder;



package cn.com.singlemountaintech.dxmanagement.common.utils;

import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.beanutils.converters.BigDecimalConverter;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.beans.PropertyDescriptor;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.nio.file.Path;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
* Created by smt2 on 16-6-6.
*/
public class ExcelUtil {
   private static final String EXCEL_XLS = "xls";
   private static final String EXCEL_XLSX = "xlsx";
   private static final Logger logger = LoggerFactory.getLogger(ExcelUtil.class);

   private static DataFormatter formatter = new DataFormatter();

   static {
       ConvertUtils.register(new BigDecimalConverter("0"), BigDecimal.class);
   }
   public static <T> List<T> read(File file, List<String> fields, List<String> columns, int offset, Class<T> cls) throws Exception {
       if (CollectionUtils.isNotEmpty(fields) && CollectionUtils.isNotEmpty(columns) && fields.size() == columns.size()) {
           Table table = readToTable(file, offset);

           List<T> list = new ArrayList<T>();
           if (CollectionUtils.isNotEmpty(fields)
                   && CollectionUtils.isNotEmpty(columns)
                   && fields.size() == columns.size()
                   && table != null
                   && CollectionUtils.isNotEmpty(table.cellSet())) {
               for (int index = 1; index <= table.rowKeySet().size(); index++) {
                   T t = cls.newInstance();
                   for (int i = 0; i < fields.size(); i++) {
                       instantiateNestedProperties(t, fields.get(i));
                       BeanUtils.setProperty(t, fields.get(i), table.get(index, columns.get(i)));
                   }
                   list.add(t);
               }
               return list;
           }
       }
       return null;
   }

   public static <T> File write(Path path, List<String> fields, List<String> columns, List<T> list)throws Exception {
       return write(path, "sheet1", fields, columns, null, list);
   }

   public static <T> File write(Path path, List<String> fields, List<String> columns,List<String> formaters, List<T> list)throws Exception {
       return write(path, "sheet1", fields, columns, formaters, list);
   }



   public static <T> File write(Path path, String sheetName, List<String> fields, List<String> columns, List<String> formaters, List<T> list) throws Exception {
       File file = FileUtils.getFile(path.toString());
       Workbook workbook = createWorkbook(path);
       Sheet sheet = null;
       if (StringUtils.isNotEmpty(sheetName)) {
           sheet = workbook.createSheet(sheetName);
       } else {
           sheet = workbook.createSheet("sheet1");
       }
       Row row = sheet.createRow(0);
       sheet.setDefaultRowHeightInPoints((short) 15);
       CellStyle headerStyle = workbook.createCellStyle();
       headerStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
       headerStyle.setAlignment(CellStyle.ALIGN_CENTER);
       Font headerFont = workbook.createFont();
       headerFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
       headerFont.setFontHeightInPoints((short) 10);
       headerStyle.setFont(headerFont);
       row.setHeight((short) (25 * 20));
       for (int i = 0; i < columns.size(); i++) {
           Cell cell = row.createCell(i);
           cell.setCellStyle(headerStyle);
           cell.setCellValue(columns.get(i));
       }
       for (int i = 0; i < list.size(); i++) {
           row = sheet.createRow(i + 1);
           rowFormat(workbook, row, fields, formaters, list.get(i));
       }
       workbook.write(FileUtils.openOutputStream(file));

       return file;
   }

   public static <T> File write(Path path, String sheetName, List<String> fields, List<String> columns, List<T> list) {
       HSSFWorkbook workbook = null;
       File file = FileUtils.getFile(path.toString());
       try {
           workbook = new HSSFWorkbook(new FileInputStream(file));
           HSSFSheet sheet = workbook.createSheet(sheetName);
           Row row = sheet.createRow(0);
           sheet.setDefaultRowHeightInPoints((short) 15);
           HSSFCellStyle headerStyle = (HSSFCellStyle) workbook.createCellStyle();
           headerStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
           headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
           HSSFFont headerFont = (HSSFFont) workbook.createFont();
           headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
           headerFont.setFontHeightInPoints((short) 10);
           headerStyle.setFont(headerFont);
           row.setHeight((short) (25 * 20));
           for (int i = 0; i < columns.size(); i++) {
               Cell cell = row.createCell(i);
               cell.setCellStyle(headerStyle);
               cell.setCellValue(columns.get(i));
           }
           for (int i = 0; i < list.size(); i++) {
               row = sheet.createRow(i + 1);
               for (int j = 0; j < fields.size(); j++) {

                   row.createCell(j).setCellValue(BeanUtils.getProperty(list.get(i), fields.get(j)));
               }
           }
           workbook.write(FileUtils.openOutputStream(file));
       } catch (Exception e) {
           if (logger.isErrorEnabled()) {
               logger.error("writeExcel", e);
           }

       } finally {
           try {
               workbook.close();
           } catch (Exception e) {
               if (logger.isErrorEnabled()) {
                   logger.error("writeExcel", e);
               }
           }
       }
       return file;
   }

   public static Table readToTable(File file, int offset) throws Exception {
       if (file != null) {
           Table<Integer, String, String> table = HashBasedTable.create();
           Workbook workbook = getWorkbook(file);
           Sheet sheet = workbook.getSheetAt(0);
           Row row = sheet.getRow(offset);
           List<String> title = new ArrayList<String>();
           for (Cell cell : row) {
               title.add(getCellStringValue(cell));
           }
           for (int rowIndex = offset + 1; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
               row = sheet.getRow(rowIndex);
               if (row!=null){
                   for (int i = 0; i < title.size(); i++) {
                       table.put(rowIndex, title.get(i), getCellStringValue(row.getCell(i)));
                   }
               }
           }
           return table;
       }
       return null;
   }

   private static Workbook getWorkbook(File file) throws IOException {
       Workbook wb = null;
       if (file.getName().endsWith(EXCEL_XLS)) {     //Excel 2003
           wb = new HSSFWorkbook(new FileInputStream(file));
       } else if (file.getName().endsWith(EXCEL_XLSX)) {    // Excel 2007/2010
           wb = new XSSFWorkbook(new FileInputStream(file));
       }
       return wb;
   }
   private static Workbook createWorkbook(Path path) {
       Workbook wb = null;
       if (path.toString().endsWith(EXCEL_XLS)) {     //Excel 2003
           wb = new HSSFWorkbook();
       } else if (path.toString().endsWith(EXCEL_XLSX)) {    // Excel 2007/2010
           wb = new XSSFWorkbook();
       }
       return wb;
   }
   private static void instantiateNestedProperties(Object obj, String fieldName) {
       try {
           String[] fieldNames = fieldName.split("\\.");
           if (fieldNames.length > 1) {
               StringBuffer nestedProperty = new StringBuffer();
               for (int i = 0; i < fieldNames.length - 1; i++) {
                   String fn = fieldNames[i];
                   if (i != 0) {
                       nestedProperty.append(".");
                   }
                   nestedProperty.append(fn);

                   Object value = PropertyUtils.getProperty(obj, nestedProperty.toString());

                   if (value == null) {
                       PropertyDescriptor propertyDescriptor = PropertyUtils.getPropertyDescriptor(obj, nestedProperty.toString());
                       Class<?> propertyType = propertyDescriptor.getPropertyType();
                       Object newInstance = propertyType.newInstance();
                       PropertyUtils.setProperty(obj, nestedProperty.toString(), newInstance);
                   }
               }
           }
       } catch (IllegalAccessException e) {
           throw new RuntimeException(e);
       } catch (InvocationTargetException e) {
           throw new RuntimeException(e);
       } catch (NoSuchMethodException e) {
           throw new RuntimeException(e);
       } catch (InstantiationException e) {
           throw new RuntimeException(e);
       }
   }

/*    public static File format(File file, List<String> columns, List<String> formater, int offset) throws IOException {
       Workbook wb = getWorkbook(file);
       Sheet sheet = wb.getSheetAt(0);
       DataFormat format = wb.createDataFormat();
       List<CellStyle> cellStyles = new ArrayList<>();
       for (String s : formater) {
           if (StringUtils.isNotEmpty(s)) {
               CellStyle cellStyle = wb.createCellStyle();
               cellStyle.setDataFormat(format.getFormat(s));
               cellStyles.add(cellStyle);
           } else {
               cellStyles.add(wb.createCellStyle());
           }
       }
       Row row = null;
       for (int rowIndex = offset + 1; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
           row = sheet.getRow(rowIndex);
           if (row != null) {
               for (int i = 0; i < columns.size(); i++) {
                   row.getCell(i).setCellStyle(cellStyles.get(i));
               }
           }
       }
       wb.write(FileUtils.openOutputStream(file));
       return file;
   }*/

   public static <T> Row rowFormat(Workbook wb, Row row, List<String> fields, List<String> formater, T t) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
       if (CollectionUtils.isNotEmpty(formater)) {
           List<CellStyle> cellStyles = getCellStyles(wb, formater);
           for (int j = 0; j < fields.size(); j++) {
               Object value = PropertyUtils.getProperty(t, fields.get(j));
               try {
                   setCellValue(row.createCell(j), value, cellStyles.get(j));
               } catch (Exception e) {
                   if (logger.isErrorEnabled()) {
                       logger.error("write", e);
                   }
               }
           }
       } else {
           for (int j = 0; j < fields.size(); j++) {
               String value = BeanUtils.getProperty(t, fields.get(j));
               try {
                   row.createCell(j).setCellValue(value);
               } catch (Exception e) {
                   if (logger.isErrorEnabled()) {
                       logger.error("write", e);
                   }
               }
           }
       }
       return row;
   }

   private static void setCellValue(Cell cell, Object value, CellStyle style) {
       if (value instanceof Date) {
           cell.setCellValue((Date) value);
       } else if ((value instanceof BigDecimal) || (value instanceof Float) || (value instanceof Double)) {
           cell.setCellValue(Double.parseDouble(value.toString()));
       } else {
           cell.setCellValue(value.toString());
       }
       cell.setCellStyle(style);
   }

   private static List<CellStyle> getCellStyles(Workbook wb, List<String> formater) {
       DataFormat format = wb.createDataFormat();
       List<CellStyle> cellStyles = new ArrayList<>();
       CellStyle cellStyle = wb.createCellStyle();
       for (String s : formater) {
           if (StringUtils.isNotEmpty(s)) {

               cellStyle.setAlignment(HorizontalAlignment.CENTER);
               cellStyle.setDataFormat(format.getFormat(s));
               cellStyles.add(cellStyle);
           } else {

               cellStyle.setAlignment(HorizontalAlignment.CENTER);
               cellStyles.add(cellStyle);
           }
       }
       return cellStyles;
   }

   private static String getCellStringValue(Cell cell) {

       String cellValue = "";
       if (cell == null) {
           return "";
       }
       switch (cell.getCellType()) {
           case Cell.CELL_TYPE_STRING:
               cellValue = cell.getStringCellValue();
               if (cellValue.trim().equals("") || cellValue.trim().length() <= 0)
                   cellValue = " ";
               break;
           case Cell.CELL_TYPE_NUMERIC:
               if (DateUtil.isCellDateFormatted(cell)) {
                   Date date = cell.getDateCellValue();
                   SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
                   try {
                       cellValue = sdf.format(date);
                   } catch (Exception e) {
                       if (logger.isErrorEnabled()) {
                           logger.error("date parse exception", e);
                       }
                   }
               } else {
                   cellValue = String.valueOf(formatter.formatCellValue(cell));
               }
               break;
           case Cell.CELL_TYPE_FORMULA:
               Workbook wb = cell.getSheet().getWorkbook();
               CreationHelper crateHelper = wb.getCreationHelper();
               FormulaEvaluator evaluator = crateHelper.createFormulaEvaluator();
               cellValue = getCellStringValue(evaluator.evaluateInCell(cell));
               break;
           case Cell.CELL_TYPE_BLANK:
               cellValue = "";
               break;
           case Cell.CELL_TYPE_BOOLEAN:
               break;
           case Cell.CELL_TYPE_ERROR:
               break;
           default:
               break;
       }
       return cellValue;
   }
}



public void downloadExcle(HttpServletRequest request, HttpServletResponse response, File file) {
   try {
       String userAgent = request.getHeader("User-Agent");
       if (file != null && file.exists()) {
           String fileName = URLEncoder.encode(file.getName(), "UTF-8");
           response.setContentType("application/vnd.ms-excel;charset=UTF-8");
           response.setCharacterEncoding("UTF-8");
           if (userAgent.contains("IE") || userAgent.contains("Chrome")) {
               response.setHeader("Content-Disposition", "p_w_upload; filename=" + fileName);
           } else {
               response.setHeader("Content-Disposition", "p_w_upload; filename*=UTF-8''" + fileName);
           }
           IOUtils.copy(FileUtils.openInputStream(file), response.getOutputStream());
           response.flushBuffer();
           return;
       } else {
           fileNotFound(request, response);
           return;
       }
   } catch (Exception e) {
       if (logger.isErrorEnabled()) {
           logger.error("saleReport", e);
       }
   }
   fileNotFound(request, response);
}