java poi導(dǎo)出圖片到excel示例代碼
更新時間:2019年03月11日 10:45:21 作者:954L
這篇文章主要介紹java poi如何導(dǎo)出圖片到excel,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
本文實例為大家分享了java使用poi導(dǎo)出圖片到Excel的具體代碼,供大家參考,具體內(nèi)容如下
代碼實現(xiàn)
Controller
/** * 導(dǎo)出志愿者/人才數(shù)據(jù) * @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{ //設(shè)置發(fā)送到客戶端的響應(yīng)內(nèi)容類型 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ù)據(jù) 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("導(dǎo)出志愿者/人才數(shù)據(jù)成功!"); } catch (Exception e) { e.printStackTrace(); logger.error("導(dǎo)出志愿者/人才數(shù)據(jù)異常!"); } }
Service
public void exportData(List<Map<String, Object>> volunteerMapList, String filePath) throws Exception { String[] alias = {"頭像", "名稱", "個人/團(tuán)體", "志愿者/人才", "性別", "生日", "手機(jī)號", "身份證", "省份", "市", "區(qū)/縣", "詳細(xì)地址", "郵箱", "政治面貌", "學(xué)歷", "民族", "職業(yè)", "團(tuán)隊人數(shù)", "藝術(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)建標(biāo)題 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); // 寫入各條記錄,每條記錄對應(yīng)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); } } } // 設(shè)置列寬 for (int i = 1; i < alias.length; i++) sheet.autoSizeColumn(i); // 處理中文不能自動調(diào)整列寬的問題 this.setSizeColumn(sheet, alias.length); } fileOutput.flush(); workbook.write(fileOutput); fileOutput.close(); } // 自適應(yīng)寬度(中文支持) 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; //當(dāng)前行未被使用過 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導(dǎo)出圖片到excel示例代碼解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
您可能感興趣的文章:
- Java利用POI實現(xiàn)導(dǎo)入導(dǎo)出Excel表格示例代碼
- Java使用POI實現(xiàn)導(dǎo)出Excel的方法詳解
- Java使用poi組件導(dǎo)出Excel格式數(shù)據(jù)
- Java使用POI導(dǎo)出大數(shù)據(jù)量Excel的方法
- Java中利用POI優(yōu)雅的導(dǎo)出Excel文件詳解
- Java Web使用POI導(dǎo)出Excel的方法詳解
- Java中用POI實現(xiàn)將數(shù)據(jù)導(dǎo)出到Excel
- java poi導(dǎo)出excel時如何設(shè)置手動換行
- Java使用Poi導(dǎo)出Excel表格方法實例
相關(guān)文章
spring?retry方法調(diào)用失敗重試機(jī)制示例解析
這篇文章主要為大家介紹了spring?retry方法調(diào)用失敗重試機(jī)制的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03java中l(wèi)ombok的@Data引發(fā)問題詳解
這篇文章主要給大家介紹了關(guān)于java中l(wèi)ombok的@Data引發(fā)問題的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09SpringBoot如何整合Springsecurity實現(xiàn)數(shù)據(jù)庫登錄及權(quán)限控制
這篇文章主要給大家介紹了關(guān)于SpringBoot如何整合Springsecurity實現(xiàn)數(shù)據(jù)庫登錄及權(quán)限控制的相關(guān)資料,文中通過圖文以及實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-01-01IDEA配置Tomcat創(chuàng)建web項目的詳細(xì)步驟
Tomcat是一個Java?Web應(yīng)用服務(wù)器,實現(xiàn)了多個Java?EE規(guī)范(JSP、Java?Servlet等),這篇文章主要給大家介紹了關(guān)于IDEA配置Tomcat創(chuàng)建web項目的詳細(xì)步驟,需要的朋友可以參考下2023-12-12