1.項目代碼實例
@Override public OutputStream exportAucLotData(String id, String password, OutputStream out) throws Exception { if (id == null) return null; if (StringUtils.isBlank(password)) password = "123456"; if (out == null) return null; AucLot lot= aucLotRepository.findOne(id); if(lot==null) return null; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); List<Object> sheet1 =sheet1Data(lot,sdf);//標題下面的數據
List<AucPrice> ps=aucPriceRepository.findAllByAucLotIdOrderByIdDesc(lot.id()); List<Object> sheet2 =sheet2Data(sdf, ps); List<AucBrand> bs=aucBrandRepository.findAllByAucLotIdOrderByCrtTimeDesc(lot.id()); List<Object> sheet3 = sheet3Data(sdf, bs); logger.debug(sheet1.toString()); logger.debug(sheet2.toString()); logger.debug(sheet3.toString()); HSSFWorkbook book = new HSSFWorkbook(); book = createExcel(book, sheet1Heads(), sheet1Fileds(), sheet1, "拍賣信息"); book = createExcel(book, sheet2Heads(), sheet2Fileds(), sheet2, "出價信息"); book = createExcel(book, sheet3Heads(), sheet3Fileds(), sheet3, "報名信息"); File tempFile=File.createTempFile("temp",".xls"); tempFile.deleteOnExit(); OutputStream tempout = new FileOutputStream(tempFile); book.write(tempout);
//下載Excel ,打開的時候進行加密處理 EncryptExcellUtil.encrypt(tempFile,password, out); logger.debug("-----excel 文檔加密 ok-----------"); return out; }
2.設置表格的題頭
private static List<String> sheet1Heads(){ List<String> heads = new ArrayList<String>(); heads.add("標的內部代碼"); heads.add("拍賣名稱"); heads.add("標的大類名稱"); heads.add("拍賣開始時間"); heads.add("拍賣結束時間"); heads.add("保證金"); heads.add("拍賣模式"); heads.add("上拍階段"); heads.add("拍賣狀態"); heads.add("發布狀態"); heads.add("所屬機構"); heads.add("城市名稱"); return heads; }
3.獲取題頭下面對應的數據
private List<Object> sheet1Data(AucLot lot,SimpleDateFormat sdf){ List<Object> data = new ArrayList<Object>(); Map<String, String> map = new HashMap<String, String>(); List<String> key = sheet1Fileds(); map.put(key.get(0), lot.goodsNo());// goodsNo map.put(key.get(1), lot.goodsName());// goodsName map.put(key.get(2), lot.firstTypeName());// firstTypeName map.put(key.get(3), (lot.startTime() != null) ? sdf.format(lot.startTime()) : "");// startTime map.put(key.get(4), (lot.endTime() != null) ? sdf.format(lot.endTime()) : "");// endTime map.put(key.get(5), (lot.bail() != null) ? lot.bail().toString() : "");// bail map.put(key.get(6), (lot.type() == 1) ? "網絡拍" : (lot.type() == 2 ? "同步拍" : "")); map.put(key.get(7), stage(lot.stage()));// stage map.put(key.get(8), status(lot.status()));// status map.put(key.get(9), (lot.isPublished() == 1) ? "未發布" : "已發布");// isPublished map.put(key.get(10), agencyName(lot.agencyId()));// agencyId to name map.put(key.get(11), lot.cityName());// cityName data.add(map); return data; }
4.???
private static List<String> sheet1Fileds(){ List<String> fileds = new ArrayList<String>(); fileds.add("goodsNo"); fileds.add("goodsName"); fileds.add("firstTypeName"); fileds.add("startTime"); fileds.add("endTime"); fileds.add("bail"); fileds.add("type"); fileds.add("stage"); fileds.add("status"); fileds.add("isPublished"); fileds.add("agencyId"); fileds.add("cityName"); return fileds; }
5.創建Excel表格對象
public HSSFWorkbook createExcel(HSSFWorkbook book, List<String> heads, List<String> fieldList, List<Object> dataList,String sheettName) { HSSFWorkbook workbook = book; if(workbook ==null) workbook= new HSSFWorkbook(); if(sheettName==null||"".equals(sheettName)) sheettName="sheet"+Math.random(); HSSFSheet sheet = workbook.createSheet(sheettName); // sheet.setDefaultColumnWidth(20); sheet.setDefaultRowHeightInPoints(20); // 在索引0的位置創建行(最頂端的行) HSSFRow row = sheet.createRow(0); HSSFCell cell=null;
//創建表格第一行的標題 for (int i = 0; i < heads.size(); i++) { // 在索引0的位置創建單元格(左上端) cell = row.createCell(i); // 定義單元格為字符串類型 cell.setCellType(HSSFCell.CELL_TYPE_STRING); // 在單元格中輸入一些內容 cell.setCellValue(heads.get(i)); }
//循環賦值 for (int n = 0; n < dataList.size(); n++) { // 在索引1的位置創建行(最頂端的行) HSSFRow row_value = sheet.createRow(n + 1); Map<String, String> dataMap =(Map<String, String>)dataList.get(n); HSSFCell cell_v=null; for (int i = 0; i < fieldList.size(); i++) { // 在索引0的位置創建單元格(左上端) cell_v = row_value.createCell(i); // 定義單元格為字符串類型 cell_v.setCellType(HSSFCell.CELL_TYPE_STRING); // 在單元格中輸入一些內容 cell_v.setCellValue(dataMap.get(fieldList.get(i))); } } return workbook ; }