欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java poi導出圖片到excel示例代碼

 更新時間:2019年03月11日 10:45:21   作者:954L  
這篇文章主要介紹java poi如何導出圖片到excel,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

本文實例為大家分享了java使用poi導出圖片到Excel的具體代碼,供大家參考,具體內容如下

代碼實現(xiàn)

Controller

/**
 * 導出志愿者/人才數(shù)據
 * @param talent_type
 * @return
 */
@RequestMapping("/exportData")
public void exportData(Integer talent_type, HttpServletResponse response) {
  String fileId = UUID.randomUUID().toString().replace("-", "");
  Map<String, Object> param = new HashMap<>() ;
  param.put("talent_type", talent_type) ;
  try {
   List<Map<String, Object>> volunteerMapList = volunteerService.getExportData(param) ;
   String rootPath = SysConfigManager.getInstance().getText("/config/sys/rootPath");
   String filePath = rootPath + "/" + fileId + ".xlsx" ;
   volunteerService.exportData(volunteerMapList, filePath) ;
   // 下載
   FileInputStream inputStream = null;
   try{
     //設置發(fā)送到客戶端的響應內容類型
     response.reset();
     response.setContentLength((int) new File(filePath).length());
     response.setContentType("application/octet-stream");
     response.addHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode("文件名.xlsx", "UTF-8")+ "\"");
     //讀取本地圖片輸入流
     inputStream = new FileInputStream(filePath);
     // 循環(huán)取出流中的數(shù)據
     byte[] b = new byte[1024];
     int len;
     while ((len = inputStream.read(b)) > 0)
      response.getOutputStream().write(b, 0, len);
   } finally{
     if(inputStream != null){
      inputStream.close();
     }
   }
   logger.debug("導出志愿者/人才數(shù)據成功!");
  } catch (Exception e) {
   e.printStackTrace();
   logger.error("導出志愿者/人才數(shù)據異常!");
  }
}

Service

public void exportData(List<Map<String, Object>> volunteerMapList, String filePath) throws Exception {
   String[] alias = {"頭像", "名稱", "個人/團體", "志愿者/人才", "性別", "生日", "手機號",
       "身份證", "省份", "市", "區(qū)/縣", "詳細地址", "郵箱", "政治面貌", "學歷", "民族",
       "職業(yè)", "團隊人數(shù)", "藝術特長", "介紹"};
   String[] keys = {"photo", "name", "type", "talent_type", "sex", "birth_day", "mobile",
       "idcard", "province", "city", "county", "address", "email", "political",
       "education", "nation", "profession", "member_count", "art_spetiality", "content"};
   File file = new File(filePath);
   if (!file.exists()) file.createNewFile();
   FileOutputStream fileOutput = new FileOutputStream(file);
   XSSFWorkbook workbook = new XSSFWorkbook();
   int sheetSize = volunteerMapList.size() + 50;
   double sheetNo = Math.ceil(volunteerMapList.size() / sheetSize);
   String photoImgPath = SysConfigManager.getInstance().getText("/config/sys/rootPath") ;
   for (int index = 0; index <= sheetNo; index++) {
     XSSFSheet sheet = workbook.createSheet();
     workbook.setSheetName(index, "人才、志愿者" + index);
     XSSFRow row = sheet.createRow(0);
     sheet.setColumnWidth(0, 2048);
     XSSFCell cell;
     XSSFCellStyle cellStyle = workbook.createCellStyle();
     XSSFFont font = workbook.createFont();
     font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
     // 居中
     cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
     // 加粗
     cellStyle.setFont(font);
     //創(chuàng)建標題
     for (int i = 0; i < alias.length; i++) {
       cell = row.createCell(i);
       cell.setCellValue(alias[i]);
       cell.setCellStyle(cellStyle);
     }
     int startNo = index * sheetSize;
     int endNo = Math.min(startNo + sheetSize, volunteerMapList.size());
     cellStyle = workbook.createCellStyle();
     // 居中
     cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
     cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
     // 寫入各條記錄,每條記錄對應excel表中的一行
     for (int i = startNo; i < endNo; i++) {
       int rowNum = i + 1 - startNo ;
       row = sheet.createRow(rowNum);
       Map<String, Object> map = (Map<String, Object>) volunteerMapList.get(i);
       for (int j = 0; j < keys.length; j++) {
         cell = row.createCell(j);
         String key = keys[j] ;
         if (key.equals("photo")){
           sheet.addMergedRegion(new CellRangeAddress(i + 1,i + 1,i + 1,i + 1)) ;
           // 頭像
           File photoFile = new File(photoImgPath + map.get(key)) ;
           if (photoFile.exists()){
             BufferedImage bufferedImage = ImageIO.read(photoFile) ;
             ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
             ImageIO.write(bufferedImage, "jpg", byteArrayOut);
             byte[] data = byteArrayOut.toByteArray();
             XSSFDrawing drawingPatriarch = sheet.createDrawingPatriarch();
             XSSFClientAnchor anchor = new XSSFClientAnchor(480, 30, 700, 250, (short)0, i + 1, (short) 1, i + 2);
             drawingPatriarch.createPicture(anchor, workbook.addPicture(data, XSSFWorkbook.PICTURE_TYPE_JPEG));
             sheet.setColumnWidth((short)500, (short)500);
             row.setHeight((short)500);
           } else {
             cell.setCellType(XSSFCell.CELL_TYPE_STRING);
             cell.setCellValue("");
           }
         } else {
           cell.setCellType(XSSFCell.CELL_TYPE_STRING);
           Object value = map.get(key);
           cell.setCellValue(value == null ? "" : value.toString());
           cell.setCellStyle(cellStyle);
         }
       }
     }
     // 設置列寬
    for (int i = 1; i < alias.length; i++)
       sheet.autoSizeColumn(i);
     // 處理中文不能自動調整列寬的問題
this.setSizeColumn(sheet, alias.length);
   }
   fileOutput.flush();
   workbook.write(fileOutput);
   fileOutput.close();
 }
 
 // 自適應寬度(中文支持)
 private void setSizeColumn(XSSFSheet sheet, int size) {
   for (int columnNum = 0; columnNum < size; columnNum++) {
     int columnWidth = sheet.getColumnWidth(columnNum) / 256;
     for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {
       XSSFRow currentRow;
       //當前行未被使用過
       if (sheet.getRow(rowNum) == null) {
         currentRow = sheet.createRow(rowNum);
       } else {
         currentRow = sheet.getRow(rowNum);
       }
       if (currentRow.getCell(columnNum) != null) {
         XSSFCell currentCell = currentRow.getCell(columnNum);
         if (currentCell.getCellType() == XSSFCell.CELL_TYPE_STRING) {
           int length = currentCell.getStringCellValue().getBytes().length;
           if (columnWidth < length) columnWidth = length;
         }
       }
     }
     columnWidth = columnWidth * 256 ;
     sheet.setColumnWidth(columnNum, columnWidth >= 65280 ? 6000 : columnWidth);
   }
 }

以上所述是小編給大家介紹java poi導出圖片到excel示例代碼解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

相關文章

  • spring?retry方法調用失敗重試機制示例解析

    spring?retry方法調用失敗重試機制示例解析

    這篇文章主要為大家介紹了spring?retry方法調用失敗重試機制的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • java中l(wèi)ombok的@Data引發(fā)問題詳解

    java中l(wèi)ombok的@Data引發(fā)問題詳解

    這篇文章主要給大家介紹了關于java中l(wèi)ombok的@Data引發(fā)問題的相關資料,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Java多邊形重心計算

    Java多邊形重心計算

    今天小編就為大家分享一篇關于Java多邊形重心計算,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java的后臺文件夾下文件的遍歷完整代碼

    Java的后臺文件夾下文件的遍歷完整代碼

    這篇文章主要介紹了Java的后臺文件夾下文件的遍歷完整代碼,首先分享了java中遍歷一個文件夾里邊的所有文件,然后介紹了用Java遍歷一個文件夾并獲取它里面的所有內容詳細代碼,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Java序列化機制詳解

    Java序列化機制詳解

    Java 序列化機制是一種將對象轉換為字節(jié)流的過程,以便在網絡上傳輸或保存到文件中,并能在需要時將字節(jié)流還原為對象,這一機制通過實現(xiàn) java.io.Serializable 接口來實現(xiàn),同時涉及到一些關鍵概念和注意事項,需要的朋友可以參考下
    2023-12-12
  • java基礎學習筆記之反射

    java基礎學習筆記之反射

    什么是反射?Java 程序在運行期間可以動態(tài)加載、解析和使用一些在編譯階段并不確定的類型數(shù)據,這一機制被稱為反射(Reflection)。今天我們就來詳細探討下java中的反射
    2016-02-02
  • Java實現(xiàn)微信公眾號獲取臨時二維碼功能示例

    Java實現(xiàn)微信公眾號獲取臨時二維碼功能示例

    這篇文章主要介紹了Java實現(xiàn)微信公眾號獲取臨時二維碼功能,結合實例形式分析了java調用微信公眾號接口實現(xiàn)臨時二維碼生成功能相關操作技巧,需要的朋友可以參考下
    2019-10-10
  • SpringBoot如何整合Springsecurity實現(xiàn)數(shù)據庫登錄及權限控制

    SpringBoot如何整合Springsecurity實現(xiàn)數(shù)據庫登錄及權限控制

    這篇文章主要給大家介紹了關于SpringBoot如何整合Springsecurity實現(xiàn)數(shù)據庫登錄及權限控制的相關資料,文中通過圖文以及實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-01-01
  • IDEA配置Tomcat創(chuàng)建web項目的詳細步驟

    IDEA配置Tomcat創(chuàng)建web項目的詳細步驟

    Tomcat是一個Java?Web應用服務器,實現(xiàn)了多個Java?EE規(guī)范(JSP、Java?Servlet等),這篇文章主要給大家介紹了關于IDEA配置Tomcat創(chuàng)建web項目的詳細步驟,需要的朋友可以參考下
    2023-12-12
  • Java使用substring()截取(提取)子字符串

    Java使用substring()截取(提取)子字符串

    這篇文章主要介紹了Java使用substring()截取(提取)子字符串,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03

最新評論