【干货:Excel中插入图片的两种方式】
生活随笔
收集整理的這篇文章主要介紹了
【干货:Excel中插入图片的两种方式】
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
背景
業(yè)務中,客戶需要導出各種數(shù)據(jù)統(tǒng)計報表,如果客戶要求,我希望導出的報表中能插入這些數(shù)據(jù)的統(tǒng)計圖表該如何操作,如圖: 復制代碼傳統(tǒng)POI
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version> </dependency> 復制代碼 package com.test.other.demo.report;import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.junit.platform.commons.util.StringUtils;import java.io.*;/*** POI 往excel插入圖片*/ public class POIExport {private Workbook workbook;public static void main(String[] args) throws Exception {Workbook workbook = getWorkBook("/Users/hui.yang/Desktop/excel演示/poi/演示1.xlsx");Sheet sheet = workbook.getSheet("sheet1");InputStream inputStream = new FileInputStream("/Users/hui.yang/Desktop/excel演示/poi/演示圖表1.png");byte[] bytes = IOUtils.toByteArray(inputStream);// 這里根據(jù)實際需求選擇圖片類型int pictureIdx = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG);CreationHelper helper = workbook.getCreationHelper();ClientAnchor anchor = helper.createClientAnchor();Drawing drawing = sheet.createDrawingPatriarch();anchor.setRow1(10); //插入行anchor.setCol1(0); // 插入列// 插入圖片Picture pict = drawing.createPicture(anchor, pictureIdx);// 調(diào)整圖片占單元格百分比的大小,1.0就是100%pict.resize(8, 5);//臨時緩沖區(qū)ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();//創(chuàng)建臨時文件try {workbook.write(byteArrayOut);} catch (IOException e) {e.printStackTrace();} finally {workbook.close();}byte[] bookByteAry = byteArrayOut.toByteArray();File file = new File("/Users/hui.yang/Desktop/excel演示/poi/演示插入結果.xlsx");if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}if (!file.exists()) {file.createNewFile();}FileOutputStream fos = new FileOutputStream(file);fos.write(bookByteAry, 0, bookByteAry.length);fos.flush();fos.close();}/*** 獲取workBoot 兼容xlsx xls*/public static Workbook getWorkBook(String filePath) throws Exception {Workbook workbook = null;if (StringUtils.isBlank(filePath)) {// throw new RuntimeException("路徑錯誤!");} else if (filePath.toLowerCase().endsWith("xls")) {workbook = new HSSFWorkbook(new FileInputStream(filePath));} else if (filePath.toLowerCase().endsWith("xlsx")) {workbook = new XSSFWorkbook(new FileInputStream(filePath));} else {// throw new RuntimeException("路徑錯誤!");}return workbook;} } 復制代碼e-iceblue(推薦)
<dependency><groupId>e-iceblue</groupId><artifactId>spire.xls.free</artifactId><version>5.1.0</version> </dependency> 復制代碼 package com.test.other.demo.report;import com.spire.xls.*;/*** e-iceblue 往excel插入圖片*/ public class EiceBlueExport {public static void main(String[] args) {//創(chuàng)建Workbook實例Workbook workbook = new Workbook();//加載Excel文檔workbook.loadFromFile("/Users/hui.yang/Desktop/excel演示/e-iceblue/演示1.xlsx");//獲取第一張工作表Worksheet sheet = workbook.getWorksheets().get(0);//設置圖表插入的位置ExcelPicture pic = sheet.getPictures().add(10, 1, "/Users/hui.yang/Desktop/excel演示/e-iceblue/演示圖表1.png");//設置圖片的寬度和高度pic.setWidth(600);pic.setHeight(120);//保存文檔workbook.saveToFile("/Users/hui.yang/Desktop/excel演示/e-iceblue/演示插入結果.xlsx", ExcelVersion.Version2013);//文檔轉pdftransFileToPdf("/Users/hui.yang/Desktop/excel演示/e-iceblue/龐源在線-安全-安全周報-20230303130801.xlsx");}/*** 轉pdf*/public static void transFileToPdf(String fillPath) {Workbook wb = new Workbook();wb.loadFromFile(fillPath);wb.getWorksheets().get(0);ConverterSetting converterSetting = new ConverterSetting();converterSetting.setSheetFitToPage(true);wb.setConverterSetting(converterSetting);//調(diào)用方法保存為PDF格式wb.saveToFile("/Users/hui.yang/Desktop/excel演示/e-iceblue/龐源在線-安全-安全周報-20230303130801.pdf", FileFormat.PDF);}} 復制代碼方案對比
1 poi對xlxs xls不同版本有不同的語法,需要單獨寫個方法去獲取WorkBook,而e-iceblue直接封裝好方法,傻瓜式操作 2 poi需設置圖片類型,文件流操作,而e-iceblue直接封裝好方法,傻瓜式操作 3 e-iceblue有豐富的文檔轉換工具,如轉為PDF,如以上代碼,我這邊轉換的pdf,看了下再也不用在***網(wǎng)站轉pdf了,騷的一批,當然也封裝了其他文檔轉換,這里不贅述 復制代碼總結
以上是生活随笔為你收集整理的【干货:Excel中插入图片的两种方式】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【西电A测:设计和制造一款自动货物分拣系
- 下一篇: osg fbo(一),生成颜色缓冲区图片