引入上一篇所用到的類java
package com.**.**.service.common.impl; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.map.LinkedMap; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; /** * @author : wangbin * @Description: TODO * @date Date : 2019-10-17 16:49 */ @Service @Slf4j public class PreparationExcelServiceImpl implements IPreparationExcelService{ @Autowired private IExcelTemplateService excelTemplateService; @Override public void exportExcel(Map<String,List<Map<String, Object>>> data, Map<String, LinkedMap<String,String>> tableHeader, String fileName, Long deptId, HttpServletResponse response, HttpServletRequest request) { try { // 1.準備須要生成excel模板的數據 List<ExportDefinition> edList = excelTemplateService.getModelData(deptId); // 2.生成導出模板 Workbook wb = new HSSFWorkbook(); Sheet sheet = excelTemplateService.createExportSheet(edList, wb,deptId); // 3.建立數據字典sheet頁 excelTemplateService.createDictSheet(edList, wb); // 4.設置數據有效性 excelTemplateService.setDataValidation(edList, sheet); for(String sheetName:data.keySet()){ LinkedMap<String,String> header = tableHeader.get(sheetName); List<Map<String,Object>> sheetData = data.get(sheetName); for(Map<String,Object> item:sheetData){ int lastRowNum = sheet.getLastRowNum(); Row dataRow = sheet.createRow(lastRowNum+1); for(int i=0;i < header.size(); i++){ Cell cell = dataRow.createCell(i); cell.setCellValue(String.valueOf(item.get(header.get(i)))); } } } String excelFileName = fileName+".xls"; ServletOutputStream outputStream = response.getOutputStream(); //根據瀏覽器判斷文件名轉碼亂碼問題 if(request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0){ excelFileName = URLEncoder.encode(excelFileName,"UTF-8"); }else { excelFileName = new String(excelFileName.getBytes("UTF-8"),"ISO8859-1"); } response.setContentType("application/octet-stream"); //直接下載文件名設置 response.setHeader("Content-Disposition","attachment;filename="+excelFileName); //隱藏數據字典Sheet wb.setSheetHidden(1,true); wb.write(outputStream); wb.close(); }catch (IOException e){ log.error("export excel error, fileName is: {},{}",fileName,e); } } @Override public Map<String,List<Map<String,String>>> importExcel(MultipartFile file, List<String> titleList) { //數據結構一個sheet一個List<Map<String,Object>> Map<String,List<Map<String,String>>> result = Maps.newHashMap(); try { //獲取文件輸入流 InputStream inputStream = file.getInputStream(); //獲取excel工做簿對象 HSSFWorkbook workbook = new HSSFWorkbook(inputStream); for(Sheet sheet: workbook) { String name = sheet.getSheetName(); if("DICT_SHEET".equals(name)){ continue; } List<Map<String,String>> data = Lists.newArrayList(); result.put(name,data); for(Row row:sheet){ if(row.getRowNum() == 0){ continue; } Map<String,String> itemData = Maps.newHashMap(); for(int i=0; i < row.getLastCellNum(); i++){ if(!EmptyUtils.isEmpty(row.getCell(i))){ CellType cellType = row.getCell(i).getCellType(); String title = titleList.get(i); if(("bronDate".equals(titleList.get(i)) || "militaryRankTime".equals(titleList.get(i))) && "NUMERIC".equals(String.valueOf(cellType))){ Date date2 = row.getCell(i).getDateCellValue(); SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd"); String date1 = dff.format(date2); //日期轉化 itemData.put(titleList.get(i), date1); }else{ row.getCell(i).setCellType(CellType.STRING); itemData.put(titleList.get(i), String.valueOf(row.getCell(i).getStringCellValue())); } } } data.add(itemData); } } workbook.close(); }catch (IOException e){ log.error("import data from excel error!",e); } return result; } }