1、超鏈接
使用POI,依賴如下
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
Java代碼如下,運行該程序它會在桌面創(chuàng)建ImageLinks.xlsx
文件。
import org.apache.poi.common.usermodel.HyperlinkType;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.xssf.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
public class ExportTest {
public static void main(String[] args) {
// 創(chuàng)建工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Image Links");
// 創(chuàng)建超鏈接
XSSFRow row = sheet.createRow(0);
XSSFCell cell = row.createCell(0);
XSSFCreationHelper creationHelper = workbook.getCreationHelper();
XSSFHyperlink hyperlink = creationHelper.createHyperlink(HyperlinkType.URL);
hyperlink.setAddress("https://img1.baidu.com/it/u=727029913,321119353&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1698771600&t=fcf922a02fa5fc68ebf888e7fc1c9dcd");
// 將超鏈接添加到單元格
cell.setHyperlink(hyperlink);
// 設(shè)置字體樣式為藍(lán)色
XSSFFont font = workbook.createFont();
font.setColor(IndexedColors.BLUE.getIndex());
XSSFCellStyle style = workbook.createCellStyle();
style.setFont(font);
cell.setCellStyle(style);
cell.setHyperlink(hyperlink);
cell.setCellValue("點擊這里下載圖片");
// 保存Excel文件到桌面
String desktopPath = System.getProperty("user.home") + "/Desktop/";
String filePath = desktopPath + "ImageLinks.xlsx";
try (FileOutputStream outputStream = new FileOutputStream(filePath)) {
workbook.write(outputStream);
System.out.println("Excel file has been saved to the desktop.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
點擊它會自動打開瀏覽器訪問設(shè)置的超鏈接
2、單元格插入圖片 - POI
使用POI
下面是java代碼
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
public class ExportTest {
public static void main(String[] args) {
// 創(chuàng)建工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Images");
// 從URL加載圖片
try {
URL imageUrl = new URL("https://img1.baidu.com/it/u=727029913,321119353&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1698771600&t=fcf922a02fa5fc68ebf888e7fc1c9dcd");
InputStream imageStream = imageUrl.openStream();
byte[] bytes = IOUtils.toByteArray(imageStream);
// 將圖片插入到單元格
XSSFRow row = sheet.createRow(0);
XSSFCell cell = row.createCell(0);
XSSFDrawing drawing = sheet.createDrawingPatriarch();
XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, cell.getColumnIndex(), row.getRowNum(), cell.getColumnIndex() + 1, row.getRowNum() + 1);
int pictureIdx = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG);
XSSFPicture picture = drawing.createPicture(anchor, pictureIdx);
picture.resize(); // 調(diào)整圖片大小
imageStream.close();
} catch (IOException e) {
e.printStackTrace();
}
// 保存Excel文件到桌面
String desktopPath = System.getProperty("user.home") + "/Desktop/";
String filePath = desktopPath + "ExcelWithImage.xlsx";
try (FileOutputStream outputStream = new FileOutputStream(filePath)) {
workbook.write(outputStream);
System.out.println("Excel file with image has been saved to the desktop.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
運行代碼之后會在桌面生成文件ExcelWithImage.xlsx
可以看到圖片插入到了單元格中
但是尺寸太大了并且占了n行n列,下面設(shè)置成占1行1列,只需要修改一行代碼
// 設(shè)置固定尺寸
picture.resize(1, 1);
看著還是有點別扭,再設(shè)置一下寬高,看下效果
可以看到已經(jīng)非常Nice了,下面是調(diào)整后的代碼文章來源:http://www.zghlxwxcb.cn/news/detail-810239.html
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.usermodel.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
public class ExportTest {
public static void main(String[] args) {
// 創(chuàng)建工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Images");
// 從URL加載圖片
try {
URL imageUrl = new URL("https://img1.baidu.com/it/u=727029913,321119353&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1698771600&t=fcf922a02fa5fc68ebf888e7fc1c9dcd");
InputStream imageStream = imageUrl.openStream();
byte[] bytes = IOUtils.toByteArray(imageStream);
// 將圖片插入到單元格
XSSFRow row = sheet.createRow(0);
XSSFCell cell = row.createCell(0);
// 設(shè)置單元格寬度,單位為字符
int widthInCharacters = 10;
row.getSheet().setColumnWidth(cell.getColumnIndex(), widthInCharacters * 256);
// 設(shè)置單元格高度,單位為點數(shù)
float heightInPoints = 100;
row.setHeightInPoints(heightInPoints);
XSSFDrawing drawing = sheet.createDrawingPatriarch();
XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, cell.getColumnIndex(), row.getRowNum(), cell.getColumnIndex() + 1, row.getRowNum() + 1);
int pictureIdx = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG);
XSSFPicture picture = drawing.createPicture(anchor, pictureIdx);
picture.resize(1, 1);// 調(diào)整圖片大小
imageStream.close();
} catch (IOException e) {
e.printStackTrace();
}
// 保存Excel文件到桌面
String desktopPath = System.getProperty("user.home") + File.separator + "Desktop" + File.separator;
String filePath = desktopPath + "ExcelWithImage.xlsx";
try (FileOutputStream outputStream = new FileOutputStream(filePath)) {
workbook.write(outputStream);
System.out.println("Excel file with image has been saved to the desktop.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
3、單元格插入圖片 - EasyExcel
先看效果
代碼如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-810239.html
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import org.apache.poi.util.IOUtils;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
public class ExportTest {
public static void main(String[] args) {
try {
// 從URL加載圖片
URL imageUrl = new URL("https://img1.baidu.com/it/u=727029913,321119353&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1698771600&t=fcf922a02fa5fc68ebf888e7fc1c9dcd");
InputStream imageStream = imageUrl.openStream();
byte[] bytes = IOUtils.toByteArray(imageStream);
// 保存Excel文件到桌面
String desktopPath = System.getProperty("user.home") + File.separator + "Desktop" + File.separator;
String filePath = desktopPath + "ExcelWithImage.xlsx";
// 使用EasyExcel創(chuàng)建Excel
EasyExcel.write(filePath)
.head(ImageData.class)
.sheet("Images")
.doWrite(data(bytes));
System.out.println("Excel file with image has been saved to the desktop.");
imageStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@ContentRowHeight(100)
private static class ImageData {
@ExcelProperty("圖片")
private byte[] imageBytes;
public ImageData(byte[] imageBytes) {
this.imageBytes = imageBytes;
}
public byte[] getImageBytes() {
return imageBytes;
}
}
private static List<ImageData> data(byte[] imageBytes) {
List<ImageData> list = new ArrayList<>();
list.add(new ImageData(imageBytes));
return list;
}
}
到了這里,關(guān)于使用Java將圖片添加到Excel的幾種方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!