发布于2026-07-24 阅读(0)
扫一扫,手机访问
在数据共享和内容发布的场景中,把 Excel 文件转成图片,其实是个挺常见的需求。图片格式嘛,通用性好,对方不用装 Office 也能直接看,还能防止数据被随意改动。对 Ja va 开发者来说,如果能用代码把这个过程自动化,集成到业务流程或者 Web 应用里,那就方便多了。下面要聊的,就是基于 Ja va Excel 处理库来实现这个转换的具体方案。

动手之前,先把项目依赖搞定。如果用 Ma ven 管理项目,在 pom.xml 里加上下面这些仓库和依赖配置就行:
com.e-iceblue e-iceblue https://repo.e-iceblue.cn/repository/ma ven-public/ e-iceblue spire.xls 16.7.3
把整个 Excel 工作表保存为图片,算是这项操作里的基础功。这个库提供了 Worksheet.sa veToImage() 方法,调用起来很简单,直接就能把工作表转成 PNG 格式的图片。
import com.spire.xls.*;
public class ExcelToImage {
public static void main(String[] args) {
// 创建工作簿实例并加载 Excel 文件
Workbook workbook = new Workbook();
workbook.loadFromFile("sample.xlsx");
// 获取第一个工作表
Worksheet sheet = workbook.getWorksheets().get(0);
// 将工作表保存为图片
sheet.sa veToImage("output/SheetToImage.png");
workbook.dispose();
}
}
有时候,整个表格导出来用不上,可能只需要其中某一块数据,比如一个报表摘要区域。这时候可以用 Worksheet.toImage() 方法,传进去一个单元格范围就行。这个方法返回的是 BufferedImage 对象,方便后续做进一步处理,比如裁剪、加水印之类的。
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;
import ja vax.imageio.ImageIO;
import ja va.awt.image.BufferedImage;
import ja va.io.File;
public class SpecificCellsToImage {
public static void main(String[] args) throws Exception {
Workbook workbook = new Workbook();
workbook.loadFromFile("sample.xlsx");
Worksheet sheet = workbook.getWorksheets().get(0);
// 将第1行第1列到第7行第4列的区域转换为图片
BufferedImage image = sheet.toImage(1, 1, 7, 4);
ImageIO.write(image, "PNG", new File("output/range.png"));
workbook.dispose();
}
}
除了工作表里的数据,Excel 里的图表也是导出图片的常客,网页上展示、PPT 里引用,都挺常见。这个库对图表转换也做了专门支持。
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;
import ja vax.imageio.ImageIO;
import ja va.awt.image.BufferedImage;
import ja va.io.File;
public class ChartToImage {
public static void main(String[] args) throws Exception {
Workbook workbook = new Workbook();
workbook.loadFromFile("Charts.xlsx");
Worksheet sheet = workbook.getWorksheets().get(0);
// 保存第一个图表为图片
BufferedImage image = workbook.sa veChartAsImage(sheet, 0);
ImageIO.write(image, "PNG", new File("output/chart.png"));
workbook.dispose();
}
}
如果工作簿里塞了好几个图表,一个一个转太麻烦。可以用 sa veChartAsImage(sheet) 方法,一次性把当前工作表里的所有图表都转成图片数组,再批量保存:
BufferedImage[] images = workbook.sa veChartAsImage(sheet);
for (int i = 0; i < images.length; i++) {
ImageIO.write(images[i], "PNG", new File("output/chart-" + i + ".png"));
}
Excel 里还有一种特殊的“图表工作表”,它跟普通工作表不一样,整个页面就是一张图表。通过 Workbook.getChartsheets() 可以获取到这些图表工作表,然后转成图片:
ChartSheet chartSheet = workbook.getChartsheets().get(0);
BufferedImage image = workbook.sa veChartAsImage(chartSheet);
ImageIO.write(image, "PNG", new File("output/chartSheet.png"));
如果对图片精度有要求,比如要用于打印或者出版,可以通过 ConverterSetting 调整 DPI 值。下面这个例子把水平和垂直分辨率都设成了 300 DPI:
Workbook workbook = new Workbook();
workbook.loadFromFile("sample.xlsx");
// 设置水平和垂直分辨率为 300 DPI
workbook.getConverterSetting().setXDpi(300);
workbook.getConverterSetting().setYDpi(300);
Worksheet sheet = workbook.getWorksheets().get(0);
sheet.sa veToImage("output/highres.png");
实际开发中,有几个地方值得提一下:
workbook.dispose() 释放资源,别让资源占着不走。ImageFormat 类指定。workbook.calculateAllValue() 计算一下所有公式的值,不然导出的图片可能跟 Excel 里看到的不一样。总的来说,借助这个 Ja va Excel 处理库,不依赖 Microsoft Office 环境,就能把 Excel 的工作表、指定区域以及图表转成图片。加上灵活的输出范围控制和分辨率设置,这套方案在报表导出、数据共享、内容发布这些场景里,都挺实用的。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8