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 = {"頭像", "名稱", "個人/團體", "志愿者/人才", "性別", "生日", "手機號",
"身份證", "省份", "市", "區(qū)/縣", "詳細(xì)地址", "郵箱", "政治面貌", "學(xué)歷", "民族",
"職業(yè)", "團隊人數(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)用失敗重試機制示例解析
這篇文章主要為大家介紹了spring?retry方法調(diào)用失敗重試機制的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-03-03
java中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-09
SpringBoot如何整合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-01
IDEA配置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

