第一步、前端擷取參數並且通過form表單或者URL方式訪問後台
//定義params對象接收索引值對參數
var params = { isChecked: 1, startTime: "2017-03-05", endTime: "2017-03-08", status: 1, arbType: 2423, claimsStatus: 3412, arbDutyId: 542, siteId: 54, provinceId: 1342};//把param對象拼接成字串
var encodeParam = function(json) { var tmps = []; for ( var key in json) { tmps.push(key + '=' + json[key]); } return tmps.join('&');} //定義url
var url=basePath+"submenuController/export?"+encodeParam(query);//判斷是否有id為_exportForm的form表單,如果沒有則建立一個隱藏的form,把url放入,然後submitvar exportForm = document.getElementById("_exportForm");if (!exportForm){ exportForm = document.createElement("form"); exportForm.setAttribute('id',"_exportForm"); exportForm.setAttribute("action", url); exportForm.setAttribute("method", "post");}document.body.appendChild(exportForm);exportForm.submit(); 第二步、後台接收參數,拼接Excel Title,查詢出list,調用Excel產生工具類
@RequestMapping(value ="export",method = RequestMethod.POST)@ResponseBodypublic void exportSiteDeclareList(HttpServletResponse response,SubmenuQuery query){ String[] headArray = {"運單號","理賠情況","申報網點名稱","省區","申報類型","責任類型", "仲裁登記時間","寄件日期","仲裁審核日期","分單人","分單時間"}; List<SubmenuVO> list = this.submenuFacade.findSubmenuPageQuery(query).getRows(); List<Object[]> contentList = new ArrayList<>(); if(list.size()>0) { for (SubmenuVO entity : list) { Object[] o = { entity.getEwbNo(),//"運單號 entity.getClaimsStatus(),//理賠情況 entity.getDeclareSiteName(),//申報網點名稱 entity.getProvinceAreaName(),//省區 entity.getArbTypeName(),//申報類型 entity.getArbDutyName(),//責任類型 entity.getArbRegisterTime(),//仲裁登記時間 entity.getEwbDate(),//寄件日期 entity.getArbCheckTime(),//仲裁審核日期 entity.getUserName(),//分單人 entity.getCreateTime()//分單時間 }; contentList.add(o); } }else{ return; } try { ExeclUtil.ExportExcel(response, headArray, contentList, "SubmenuList.xls"); } catch (Exception e) { LOGGER.error("網點理賠申報匯出報錯"+e); }}
第三步、Excel工具類
package util;import org.apache.poi.hssf.usermodel.*;import org.apache.poi.hssf.util.HSSFColor;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;import javax.servlet.http.HttpServletResponse;/** * Excel匯出工具類 */public class ExeclUtil { /** * @param title * @param headers * @param dataset */ public static InputStream exportExcel(String title, String[] headers, List<Object[]> dataset) { InputStream is; ByteArrayOutputStream os = new ByteArrayOutputStream(); // 聲明一個工作薄 HSSFWorkbook workbook = new HSSFWorkbook(); // 產生一個表格 HSSFSheet sheet = workbook.createSheet(title); // 設定表格預設列寬度為15個位元組 sheet.setDefaultColumnWidth((short) 15); // 產生一個樣式 HSSFCellStyle style = workbook.createCellStyle(); // 設定這些樣式 style.setFillForegroundColor(HSSFColor.SKY_BLUE.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 產生一個字型 HSSFFont font = workbook.createFont(); font.setColor(HSSFColor.VIOLET.index); font.setFontHeightInPoints((short) 12); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 把字型應用到當前的樣式 style.setFont(font); // 產生並設定另一個樣式 HSSFCellStyle style2 = workbook.createCellStyle(); style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index); style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style2.setBorderBottom(HSSFCellStyle.BORDER_THIN); style2.setBorderLeft(HSSFCellStyle.BORDER_THIN); style2.setBorderRight(HSSFCellStyle.BORDER_THIN); style2.setBorderTop(HSSFCellStyle.BORDER_THIN); style2.setAlignment(HSSFCellStyle.ALIGN_CENTER); style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 產生另一個字型 HSSFFont font2 = workbook.createFont(); font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); // 把字型應用到當前的樣式 style2.setFont(font2); // 聲明一個畫圖的頂級管理器 HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); // 定義注釋的大小和位置,詳見文檔 HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 2, (short) 6, 5)); // 設定注釋內容 comment.setString(new HSSFRichTextString("可以在POI中添加註釋。")); // 設定注釋作者,當滑鼠移動到儲存格上是可以在狀態列