【POI】使用POI处理xlsx的cell中的超链接 和 插入图片 和 设置打印区域
使用POI对xlsx中插入超链接和 插入图片
package com.it.poiTest; import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; import javax.imageio.ImageIO; import org.apache.poi.common.usermodel.Hyperlink;
import org.apache.poi.hslf.examples.CreateHyperlink;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import org.apache.poi.xssf.usermodel.XSSFDrawing;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFHyperlink;
import org.apache.poi.xssf.usermodel.XSSFPicture;
import org.apache.poi.xssf.usermodel.XSSFPrintSetup;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class AddPhotoUrl { public static void main(String[] args) {
XSSFWorkbook workbook = new XSSFWorkbook();
try {
FileOutputStream out = new FileOutputStream("AddPhotoUrl.xlsx");
XSSFSheet sheet = workbook.createSheet("1");
XSSFCellStyle style = workbook.createCellStyle();
XSSFFont font = workbook.createFont();
font.setUnderline(XSSFFont.U_DOUBLE);
font.setColor(IndexedColors.RED.getIndex());
style.setFont(font); /**
* cell中实现URL超链接
*/
sheet.setColumnWidth(2, 4000);
Row row = sheet.createRow(2);
Cell cell = row.createCell(2);
cell.setCellValue("Angel挤一挤的博客");
cell.setCellStyle(style); CreationHelper createHelper = workbook.getCreationHelper();
//实现超链接的类 参数有4.5种,有URL,FILE等不同的类型
XSSFHyperlink link = (XSSFHyperlink) createHelper.createHyperlink(Hyperlink.LINK_URL);
link.setAddress("http://www.cnblogs.com/sxdcgaq8080/");
cell.setHyperlink(link); /**
* cell实现File超链接
*/
XSSFCellStyle style2 = workbook.createCellStyle();
row = sheet.createRow(3);
cell = row.createCell(2);
cell.setCellValue("新建文件夹.txt");
XSSFFont font2 = workbook.createFont();
font2.setColor(HSSFColor.YELLOW.index);
style2.setFont(font2);
cell.setCellStyle(style2);
link = (XSSFHyperlink) createHelper.createHyperlink(Hyperlink.LINK_FILE);
link.setAddress("f:/新建文本.txt");//路径不对,可能会出问题
cell.setHyperlink(link); /**
* cell实现邮箱超链接 注意邮箱的这个address的写法
*/
XSSFCellStyle style3 = workbook.createCellStyle();
row = sheet.createRow(4);
cell = row.createCell(2);
cell.setCellValue("Angel的邮箱");
XSSFFont font3 = workbook.createFont();
font3.setColor(HSSFColor.VIOLET.index);
style3.setFont(font3);
link = (XSSFHyperlink) createHelper.createHyperlink(Hyperlink.LINK_EMAIL);
link.setAddress("mailto:18292813417@163.com?"+"subject=Hyperlink");
cell.setHyperlink(link); /**
* cell实现 插入图片
*/
row = sheet.createRow(5);
cell = row.createCell(5);
row.setHeight((short) 1000);
//画图的顶级管理器
XSSFDrawing patriarch = sheet.createDrawingPatriarch();
//为图片管理器配置参数
//参数1 第一个单元格中的x轴坐标
//参数2 第一个单元格中的y轴坐标
//参数3 第二个单元格中的x轴坐标
//参数4 第二个单元格中的y轴坐标
//参数5
//参数6
//参数7
//参数8
XSSFClientAnchor anchor = new XSSFClientAnchor(100, 100, 255, 255, 13, 9, 14, 16);
anchor.setAnchorType(AnchorType.DONT_MOVE_DO_RESIZE); ByteArrayOutputStream byteOutPut = new ByteArrayOutputStream();
//读取到图片信息
BufferedImage bufferImage =ImageIO.read(new File("F:/酷我音乐.png"));
//将图片写入到ByteArrayOutputStream中
ImageIO.write(bufferImage, "png", byteOutPut);
//参数1 代表图片的位置信息 参数2 代表图片来源
patriarch.createPicture(anchor, workbook.addPicture(byteOutPut.toByteArray(), XSSFWorkbook.PICTURE_TYPE_PNG)); /**
* 设置打印区域
*/
//设置哪一个sheet中的第几行到第几行 第几列到第几列
workbook.setPrintArea(0, 1, 9, 1, 10);
//设置纸张大小
sheet.getPrintSetup().setPaperSize(XSSFPrintSetup.A4_PAPERSIZE);
//设置是否显示网格线
sheet.setDisplayGridlines(true);
//设置是否打印网格线
sheet.setPrintGridlines(true); workbook.write(out);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} }
效果如下:
附录1:其中超链接的类型:Hyperlink的常量
附录2:设置图片的处理效果:
anchor.setAnchorType(AnchorType.DONT_MOVE_DO_RESIZE);
其实就是下面的这几个意思:
附录3:如果new XSSFClientAnchor(100, 100, 255, 255, 13, 9, 14, 16);其中的放置图片的时候,如果图片的右下角的坐标小于左上角的坐标的时候,会发生一下的情况:
【POI】使用POI处理xlsx的cell中的超链接 和 插入图片 和 设置打印区域的更多相关文章
- VS2012中MFC 操作mshflexgrid插入图片
CPictureHolder pic,picSection; pic.CreateFromBitmap(IDB_BITMAP); LPDISPATCH pPic = pic.GetPictureDis ...
- NPOI(2.1.3)向excel中插入图片,xls文档图片插入成功,xlsx文档图片插入失败
众所周知,NPOI对xls和xlsx两个版本的excel文档的操作并没有一个统一的支持, 程序若想兼容这两个版本的操作,必须根据excel版本分别去调用HSSF和XSSF这两套操作库, 之前一直不明白 ...
- java POI实现向Excel中插入图片
做Web开发免不了要与Excel打交道.今天老大给我一个任务-导出Excel.开始想的还是蛮简单的,无非就是查找,构建Excel,response下载即可.但是有一点不同,就是要加入图片, ...
- java 在Excel中插入图片 POI实现
一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97- ...
- 使用Java POI来选择提取Word文档中的表格信息
通过使用Java POI来提取Word(1992)文档中的表格信息,其中POI支持不同的ms文档类型,在具体操作中需要注意.本文主要是通过POI来提取微软2003文档中的表格信息,具体code如下(事 ...
- java算法面试题:从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序 ;读取docx 读取doc 使用poi 相关jar包提集提供下载
从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序 1,张三,28 2,李四,35 3,张三,28 4,王五,35 5,张三,28 6,李四,35 7,赵六,28 ...
- POI 生成、导出Excel(包含多个sheet)带 图片
1.导入依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</ar ...
- POI插入图片至Excel使用固定的长宽
使用POI在Excel里插入图片,如何使插入的图片使用固定的大小?先介绍原有的两种方式: 一种是指定开始和结尾单元格,然后从头画到尾,相当于平铺 还有一种就是仅指定开始的单元格,图片的大小跟这个单元格 ...
- Java利用poi生成word(包含插入图片,动态表格,行合并)
转(小改): Java利用poi生成word(包含插入图片,动态表格,行合并) 2018年12月20日 09:06:51 wjw_11093010 阅读数:70 Java利用poi生成word(包含插 ...
随机推荐
- Delphi cxGrid –--> RecordIndex out of Range
delphi 导出数据时常常出现这样一个错误 < RecordIndex out of Range > 处理办法: 设定 cxGridDBTableView 的 GridModeBuffe ...
- 3.SpringMVC修改配置文件路径和给界面传递数据
1.修改配置文件路径 达到 配置多文件的目的 web.xml文件中基础配置有springMVC配置的servlet路径 <servlet-name>SpringMVC</serv ...
- 【leetcode】atoi (hard) ★
虽然题目中说是easy, 但是我提交了10遍才过,就算hard吧. 主要是很多情况我都没有考虑到.并且有的时候我的规则和答案中的规则不同. 答案的规则: 1.前导空格全部跳过 “ 123” ...
- C# 串口操作系列(2) -- 入门篇,为什么我的串口程序在关闭串口时候会死锁 ?
第一篇文章我相信很多人不看都能做的出来,但是,用过微软SerialPort类的人,都遇到过这个尴尬,关闭串口的时候会让软件死锁.天哪,我可不是武断,算了.不要太绝对了.99.9%的人吧,都遇到过这个问 ...
- HDU 4950 Monster
题目链接 题意:有一个怪物的血量为h,人攻击怪物,每回合可以杀掉a滴血,再回b滴血,k个回合之后人会休息一回合,即人不攻击而怪物回b滴血,问能否杀死.翻译过来就是给定一个数h,每轮可以先减a再加b,k ...
- codeforces gym 100286 I iSharp (字符串模拟)
题目链接 给定一个字符串.输入是int& a*[]&, b, c*; 输出是 int&&[]* a;int& b;int&* c; 输入格式里逗号后面一 ...
- 将txt多行文本合并成一行
1.用word打开txt文本2.打开“替换”功能,查找内容“^p”,替换内容为“,”(均无双引号).即可把多列文字合并为一行.
- Apache 的 httpd.conf 详解
ServerRoot “/usr/local“ ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是 ...
- osgi学习
Bundle可以被动态地安装.启动.停止和卸载.Bundle是服务(Service)和组件(Component)的载体.在OSGi中,每个Bundle都有自己独立于其他Bundle的ClassLoad ...
- printf 与c的基本类型之间的关系
型 書式 注意事項 ssize_t %zd size_t %zu intmax_t %jd uintmax_t %ju ptrdiff_t %t signed char %hhd unsigned c ...