JAVA POI 图片插入excel保存导出,可多图,多种插入样式

news2024/12/24 10:24:32

JAVA POI 图片插入excel保存导出,可多图,多种插入样式

JAVA POI 图片插入excel保存导出,可多图,多种插入样式

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Date;

import javax.imageio.ImageIO;

import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelByImg {

	public static void main(String[] args) {
		// 1.竖向排列
		exportExcelOne();
		// 2.横向排列
		exportExcelTwo();
		// 3. 同一个单元格横向排列
		exportExcelThree();
		// 4.同一个单元格竖向排列
		exportExcelFour();
	}

	/**
	 * 1.竖向排列
	 */
	public static void exportExcelOne() {
		String[] imgs = { "D:\\888.jpg", "D:\\666.jpg", "D:\\777.jpg" };
		HSSFWorkbook workBook = new HSSFWorkbook();// 创建工作簿
		HSSFSheet sheet = workBook.createSheet();// 创建工作表
		sheet.setColumnWidth(0, 4800);// 列宽
		BufferedImage bufferedImage = null;
		HSSFPatriarch hSSFPatriarch = sheet.createDrawingPatriarch();// 画图管理器
		try {
			for (int i = 0; i < imgs.length; i++) {
				HSSFRow imgRow = sheet.createRow(i);// 行
				File file = new File(imgs[i]);
				imgRow.setHeight((short) 1000);// 设置高度
				bufferedImage = ImageIO.read(file);
				ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
				ImageIO.write(bufferedImage, "jpg", byteArrayOutputStream);
				HSSFClientAnchor hSSFClientAnchor = new HSSFClientAnchor(
						20, /* 开始点 x坐标,范围 0-1023 */
						10, /* 开始点y坐标范.围 0-255 */
						1003, /* 结束点x坐标,范围 0-1023 */
						245, /* 结束点y坐标,范围 0-255 */
						(short) 0, /* 开始单元格列号,范围0-255 */
						i, /* 开始单元格行号,范围0-255 * 256 */
						(short) 0, /* 结束单元格列号,范围0-255 */
						i/* 结束单元格行号,范围0-255 * 256 */
				);
				hSSFPatriarch.createPicture(hSSFClientAnchor,
						workBook.addPicture(byteArrayOutputStream.toByteArray(), XSSFWorkbook.PICTURE_TYPE_JPEG));
			}
			FileOutputStream outputStream = new FileOutputStream("D://" + new Date().getTime() + ".xls");
			workBook.write(outputStream);
			outputStream.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	/**
	 * 2.横向排列
	 */
	public static void exportExcelTwo() {
		String[] imgs = { "D:\\888.jpg", "D:\\666.jpg", "D:\\777.jpg" };
		HSSFWorkbook workBook = new HSSFWorkbook();
		HSSFSheet sheet = workBook.createSheet();
		BufferedImage bufferedImage = null;
		HSSFPatriarch hSSFPatriarch = sheet.createDrawingPatriarch();
		try {
			HSSFRow imgRow = sheet.createRow(0);
			imgRow.setHeight((short) 1000);
			for (int i = 0; i < imgs.length; i++) {
				sheet.setColumnWidth(i, 4800);
				File file = new File(imgs[i]);
				bufferedImage = ImageIO.read(file);
				ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
				ImageIO.write(bufferedImage, "jpg", byteArrayOutputStream);
				HSSFClientAnchor hSSFClientAnchor = new HSSFClientAnchor(20, 10, 1003, 245, (short) i, 0, (short) i, 0);
				hSSFPatriarch.createPicture(hSSFClientAnchor,
						workBook.addPicture(byteArrayOutputStream.toByteArray(), XSSFWorkbook.PICTURE_TYPE_JPEG));
			}
			FileOutputStream outputStream = new FileOutputStream("D://" + new Date().getTime() + ".xls");
			workBook.write(outputStream);
			outputStream.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	/**
	 * 3. 同一个单元格横向排列
	 */
	public static void exportExcelThree() {
		String[] imgs = { "D:\\888.jpg", "D:\\666.jpg", "D:\\777.jpg" };
		HSSFWorkbook workBook = new HSSFWorkbook();
		HSSFSheet sheet = workBook.createSheet();
		sheet.setColumnWidth(0, 4800 * imgs.length);
		BufferedImage bufferedImage = null;
		HSSFPatriarch hSSFPatriarch = sheet.createDrawingPatriarch();
		try {
			HSSFRow imgRow = sheet.createRow(0);
			imgRow.setHeight((short) 1000);

			int mar = 10 + 10 + (imgs.length - 1) * 10;// 计算边距
			int ave = (1023 - mar) / imgs.length;// 大致平均值,每个图片宽度

			for (int i = 0; i < imgs.length; i++) {
				File file = new File(imgs[i]);
				bufferedImage = ImageIO.read(file);
				ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
				ImageIO.write(bufferedImage, "jpg", byteArrayOutputStream);
				HSSFClientAnchor hSSFClientAnchor = new HSSFClientAnchor(10 * (i + 1) + ave * i, 10,
						(10 + ave) * (i + 1), 245, (short) 0, 0, (short) 0, 0);
				hSSFPatriarch.createPicture(hSSFClientAnchor,
						workBook.addPicture(byteArrayOutputStream.toByteArray(), XSSFWorkbook.PICTURE_TYPE_JPEG));
			}
			FileOutputStream outputStream = new FileOutputStream("D://" + new Date().getTime() + ".xls");
			workBook.write(outputStream);
			outputStream.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	/**
	 * 4.同一个单元格竖向排列
	 */
	public static void exportExcelFour() {
		String[] imgs = { "D:\\888.jpg", "D:\\666.jpg", "D:\\777.jpg" };
		HSSFWorkbook workBook = new HSSFWorkbook();
		HSSFSheet sheet = workBook.createSheet();
		sheet.setColumnWidth(0, 4800);
		BufferedImage bufferedImage = null;
		HSSFPatriarch hSSFPatriarch = sheet.createDrawingPatriarch();
		try {
			HSSFRow imgRow = sheet.createRow(0);
			imgRow.setHeight((short) (1000 * imgs.length));

			int mar = 5 + 5 + (imgs.length - 1) * 5;// 计算边距
			int ave = (255 - mar) / imgs.length;// 大致平均值,每个图片高度

			for (int i = 0; i < imgs.length; i++) {
				File file = new File(imgs[i]);
				bufferedImage = ImageIO.read(file);
				ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
				ImageIO.write(bufferedImage, "jpg", byteArrayOutputStream);
				HSSFClientAnchor hSSFClientAnchor = new HSSFClientAnchor(20, 5 * (i + 1) + ave * i, 1003,
						(5 + ave) * (i + 1), (short) 0, 0, (short) 0, 0);
				hSSFPatriarch.createPicture(hSSFClientAnchor,
						workBook.addPicture(byteArrayOutputStream.toByteArray(), XSSFWorkbook.PICTURE_TYPE_JPEG));
			}
			FileOutputStream outputStream = new FileOutputStream("D://" + new Date().getTime() + ".xls");
			workBook.write(outputStream);
			outputStream.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

在这里插入图片描述
4.
在这里插入图片描述
2.
在这里插入图片描述
1.
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/721821.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3588平台开发系列讲解(Camera篇)OV569摄像头调试

文章目录 一、摄像头识别检测二、查看摄像头支持的格式三、摄像头采集格式查询四、摄像头采集格式查询沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要讲解OV569摄像头调试。 OV5695 是一种图像传感器,用于摄像头设备。要进行 OV5695 摄像头的调试,通常涉…

如何使用 Oracle 的 Operator 在 Kubernetes 上运行 MySQL

过去几年,Kubernetes 对有状态应用程序的支持已经相当成熟。现在可以将数据库放置在集群内,从而使其能够受益于与其他工作负载相同的可扩展性。 MySQL 是最流行的关系数据库引擎之一,现在由官方Kubernetes 运营商对其进行了增强。Oracle 主导的开源项目提供了一种在 Kubern…

Java学习笔记(static静态变量)

static static表示静态&#xff0c;是Java中的一个修饰符&#xff0c;可以修饰成员方法&#xff0c;成员变量 被static修饰的成员变量&#xff0c;叫做静态变量&#xff0c;被static修饰的成员方法&#xff0c;叫做静态方法 静态变量的特点&#xff1a; 被该类所有对象共享…

[golang gin框架] 39.Gin商城项目-微服务实战之微服务架构

一.引入 单体架构在 中小企业内部用的是非常多的&#xff0c;当 业务不复杂&#xff0c; 团队规模不大的时候&#xff0c;单体架构比微服务架构具有 更高的生产率 单体架构 当 业务比较复杂, 并发量比较大, 团队规模扩大的时候, 就需要引入微服务架构了,它比单体架构具有 更高的…

moven项目生成和运行

[TOC]moven学习笔记 生成maven项目 mkdir movenT cd movenT/ mvn -B archetype:generate -DgroupIdcom.mycompany.app -DartifactIdmy-app -DarchetypeArtifactIdmaven-archetype-quickstart -DarchetypeVersion1.4 tree 生成jar mvn package 运行 class cd /root/moven…

青岛大学_王卓老师【数据结构与算法】Week04_08_线性表的应用1_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c;另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础–…

scratch 抓狐狸

scratch 抓狐狸 本程序的功能是通过键盘控制“男孩”角色移动&#xff08;程序用的是旋转形式实现上下移动&#xff0c;后来才发现有直接改变y坐标的模块&#xff09;&#xff0c;“狐狸”角色连续在随机位置、随机方向生成&#xff0c;程序显示在场“狐狸”的数量&#xff0c;…

ChatGPT显示付费墙内容,OpenAI把联网功能关了

ChatGPT 学会上网不到两个月&#xff0c;OpenAI就不能忍了。 本周二&#xff0c;OpenAI 突然宣布停止 ChatGPT 的网络浏览功能「使用 Bing 浏览」。 果不其然&#xff0c;关闭的原因是这项功能遭到了滥用。在周一发布的一篇文章中&#xff0c;OpenAI 支持团队人员表示&#xf…

css基础知识十七:如何使用CSS完成视差滚动效果?

一、是什么 视差滚动&#xff08;Parallax Scrolling&#xff09;是指多层背景以不同的速度移动&#xff0c;形成立体的运动效果&#xff0c;带来非常出色的视觉体验 我们可以把网页解刨成&#xff1a;背景层、内容层、悬浮层 当滚动鼠标滑轮的时候&#xff0c;各个图层以不同…

机器学习22:机器学习工程落地注意事项-II(公平-Fairness)

负责任地评估机器学习模型需要做的不仅仅是计算损失指标。在将模型投入实际应用之前&#xff0c;审核训练数据并评估偏见&#xff08;Bias&#xff09;对预测至关重要。本文内容着眼于解读训练数据中可能存在的不同类型的人类偏见&#xff0c;同时提供了识别它们并评估其影响的…

Python爬虫与数据挖掘在外汇市场分析中的应用

外汇市场是全球最大的金融市场之一&#xff0c;每天的交易量可以达到几万亿美元。深入了解外汇市场的趋势和变化对于投资者来说至关重要&#xff0c;因为即使是微小的价格波动也可能导致巨额利润或损失。从过去的历史数据中抽取经验教训&#xff0c;并使用数据挖掘算法来预测未…

xDS协议

xDS xDS协议是"X Discovery Service"&#xff0c;这里的X表示它不是指具体的某个协议&#xff0c;是一组基于不同数据源的服务发现协议的总称&#xff0c;包括CDS&#xff0c;LDS&#xff0c;EDS&#xff0c;RDS和SDS等。客户端可以用噶多种方式获取数据资源&#x…

【SAP UI5 控件学习】DAY01 Input组Part I

UI5常用控件 1.Input组 1.1 Feed Input控件 这个控件通常是用来显示发布评论的。它可以显示用户头像&#xff0c;并且在内容输入方面&#xff0c;可以设置PlaceHolder&#xff0c;自增扩展大小&#xff0c;限制行数&#xff0c;以及限制字数等诸多设置。 1.1.1 没有头像的输…

电压放大器的应用领域有哪些

电压放大器是一种电子器件&#xff0c;其主要作用是将输入信号的电压放大到输出端。在现代电子技术中&#xff0c;电压放大器被广泛应用于各种领域&#xff0c;包括通信、医疗、工业控制、汽车电子等。下面安泰电子就来详细了解一下电压放大器的应用领域。 通信领域&#xff1a…

软考:中级软件设计师:系统总线,系统可靠性,串联和并联可靠度

软考&#xff1a;中级软件设计师:系统总线&#xff0c; 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心…

4.39ue4:ue4表格设置、读取

1.创建表格&#xff0c;内容浏览器&#xff0c;右键&#xff0c;其他&#xff0c;数据表格&#xff0c;下拉选择一个数据结构类型的起始项。 2.被选择的数据结构将以表格的形式列出数据。 3.使用方式&#xff1a; i: 输出一行数据&#xff08;text&#xff09; ii&#xff…

Stable Diffusion 图片生成AI模型 Windows Mac部署指南

Stable Diffusion是2022年发布的深度学习文本到图像生成模型。它主要用于根据文本的描述产生详细图像&#xff0c;它也可以应用于其他任务&#xff0c;如内补绘制、外补绘制&#xff0c;以及在提示词​&#xff08;英语&#xff09;指导下产生图生图的翻译。 DreamStudio 现已…

一条MYSQL记录是如何储存的

主要还是看MYSQL默认的储存引擎 InnoDB 每个创建一个数据库 就会在/var/lib/mysql/ 目录里面创建一个以 database 为名的目录 目录里面包含以下三个文件 db.opt&#xff0c;用来存储当前数据库的默认字符集和字符校验规则。(数据库的数据)t_order.frm &#xff0c;t_order 的…

html---链接跳转案例

目录 一、要求&#xff1a;设置一个网页如下图所示&#xff0c;可实现首页、列表页、详情页、登录页链接 二、实现&#xff1a;实现代码及截图如下 三、寄语 一、要求&#xff1a;设置一个网页如下图所示&#xff0c;可实现首页、列表页、详情页、登录页链接 二、实现&…

飞书深诺、恒生面试(部分)(未完全解析)

飞书深诺 说一下你对SaaS项目的理解&#xff1f;数据隔离是怎么处理的&#xff1f;Answer: 我们采用的是SAAS服务多租户数据隔离架构中的1.3共享数据库&#xff0c;通过租户ID来隔离&#xff0c;成本最低&#xff0c;隔离级别最低。Q&#xff1a;有没有开发隔离的中间件&#x…