【POI】使用POI处理xlsx的cell中的超链接 和 插入图片 和 设置打印区域

简介: 使用POI对xlsx中插入超链接和 插入图片   1 package com.it.poiTest; 2 3 import java.awt.image.BufferedImage; 4 import java.

使用POI对xlsx中插入超链接和 插入图片

 

  1 package com.it.poiTest;
  2 
  3 import java.awt.image.BufferedImage;
  4 import java.io.ByteArrayOutputStream;
  5 import java.io.File;
  6 import java.io.FileNotFoundException;
  7 import java.io.FileOutputStream;
  8 import java.io.IOException;
  9 
 10 import javax.imageio.ImageIO;
 11 
 12 import org.apache.poi.common.usermodel.Hyperlink;
 13 import org.apache.poi.hslf.examples.CreateHyperlink;
 14 import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
 15 import org.apache.poi.hssf.usermodel.HSSFPatriarch;
 16 import org.apache.poi.hssf.util.HSSFColor;
 17 import org.apache.poi.ss.usermodel.Cell;
 18 import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;
 19 import org.apache.poi.ss.usermodel.CreationHelper;
 20 import org.apache.poi.ss.usermodel.IndexedColors;
 21 import org.apache.poi.ss.usermodel.Row;
 22 import org.apache.poi.xssf.usermodel.XSSFCellStyle;
 23 import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
 24 import org.apache.poi.xssf.usermodel.XSSFDrawing;
 25 import org.apache.poi.xssf.usermodel.XSSFFont;
 26 import org.apache.poi.xssf.usermodel.XSSFHyperlink;
 27 import org.apache.poi.xssf.usermodel.XSSFPicture;
 28 import org.apache.poi.xssf.usermodel.XSSFPrintSetup;
 29 import org.apache.poi.xssf.usermodel.XSSFSheet;
 30 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 31 
 32 public class AddPhotoUrl {
 33 
 34     public static void main(String[] args) {
 35         XSSFWorkbook workbook = new XSSFWorkbook();
 36         try {
 37             FileOutputStream out = new FileOutputStream("AddPhotoUrl.xlsx");
 38             XSSFSheet sheet = workbook.createSheet("1");
 39             XSSFCellStyle style = workbook.createCellStyle();
 40             XSSFFont font = workbook.createFont();
 41             font.setUnderline(XSSFFont.U_DOUBLE);
 42             font.setColor(IndexedColors.RED.getIndex());
 43             style.setFont(font);
 44             
 45             
 46             /**
 47              * cell中实现URL超链接
 48              */
 49             sheet.setColumnWidth(2, 4000);
 50             Row row = sheet.createRow(2);
 51             Cell cell = row.createCell(2);
 52             cell.setCellValue("Angel挤一挤的博客");
 53             cell.setCellStyle(style);
 54             
 55             
 56             CreationHelper createHelper = workbook.getCreationHelper();
 57             //实现超链接的类                                                        参数有4.5种,有URL,FILE等不同的类型
 58             XSSFHyperlink link = (XSSFHyperlink) createHelper.createHyperlink(Hyperlink.LINK_URL);
 59             link.setAddress("http://www.cnblogs.com/sxdcgaq8080/");
 60             cell.setHyperlink(link);
 61             
 62             
 63             /**
 64              * cell实现File超链接
 65              */
 66             XSSFCellStyle style2 = workbook.createCellStyle();
 67             row = sheet.createRow(3);
 68             cell = row.createCell(2);
 69             cell.setCellValue("新建文件夹.txt");
 70             XSSFFont font2 = workbook.createFont();
 71             font2.setColor(HSSFColor.YELLOW.index);
 72             style2.setFont(font2);
 73             cell.setCellStyle(style2);
 74             link = (XSSFHyperlink) createHelper.createHyperlink(Hyperlink.LINK_FILE);
 75             link.setAddress("f:/新建文本.txt");//路径不对,可能会出问题
 76             cell.setHyperlink(link);
 77             
 78             
 79             /**
 80              * cell实现邮箱超链接   注意邮箱的这个address的写法
 81              */
 82             XSSFCellStyle style3 = workbook.createCellStyle();
 83             row = sheet.createRow(4);
 84             cell = row.createCell(2);
 85             cell.setCellValue("Angel的邮箱");
 86             XSSFFont font3 = workbook.createFont();
 87             font3.setColor(HSSFColor.VIOLET.index);
 88             style3.setFont(font3);
 89             link = (XSSFHyperlink) createHelper.createHyperlink(Hyperlink.LINK_EMAIL);
 90             link.setAddress("mailto:18292813417@163.com?"+"subject=Hyperlink");
 91             cell.setHyperlink(link);
 92             
 93     
 94             
 95             /**
 96              * cell实现 插入图片
 97              */
 98             row = sheet.createRow(5);
 99             cell = row.createCell(5);
100             row.setHeight((short) 1000);
101             //画图的顶级管理器
102             XSSFDrawing patriarch = sheet.createDrawingPatriarch();
103             //为图片管理器配置参数  
104             //参数1  第一个单元格中的x轴坐标
105             //参数2 第一个单元格中的y轴坐标
106             //参数3 第二个单元格中的x轴坐标
107             //参数4 第二个单元格中的y轴坐标
108             //参数5
109             //参数6
110             //参数7
111             //参数8   
112             XSSFClientAnchor anchor = new XSSFClientAnchor(100, 100, 255, 255, 13, 9, 14, 16);
113             anchor.setAnchorType(AnchorType.DONT_MOVE_DO_RESIZE);
114             
115             
116             ByteArrayOutputStream byteOutPut = new ByteArrayOutputStream();
117             //读取到图片信息
118             BufferedImage  bufferImage =ImageIO.read(new File("F:/酷我音乐.png"));
119             //将图片写入到ByteArrayOutputStream中
120             ImageIO.write(bufferImage, "png", byteOutPut);
121             //参数1 代表图片的位置信息               参数2 代表图片来源
122             patriarch.createPicture(anchor, workbook.addPicture(byteOutPut.toByteArray(), XSSFWorkbook.PICTURE_TYPE_PNG));
123             
124             
125             /**
126              * 设置打印区域
127              */
128             //设置哪一个sheet中的第几行到第几行  第几列到第几列
129             workbook.setPrintArea(0, 1, 9, 1, 10);
130             //设置纸张大小
131             sheet.getPrintSetup().setPaperSize(XSSFPrintSetup.A4_PAPERSIZE);
132             //设置是否显示网格线
133             sheet.setDisplayGridlines(true);
134             //设置是否打印网格线
135             sheet.setPrintGridlines(true);
136             
137             
138             workbook.write(out);
139             out.close();
140         } catch (FileNotFoundException e) {
141             e.printStackTrace();
142         } catch (IOException e) {
143             e.printStackTrace();
144         }
145     }
146 
147 }
View Code

 

效果如下:

 

附录1:其中超链接的类型:Hyperlink的常量

 

附录2:设置图片的处理效果:

anchor.setAnchorType(AnchorType.DONT_MOVE_DO_RESIZE);

其实就是下面的这几个意思:

 

附录3:如果new XSSFClientAnchor(100, 100, 255, 255, 13, 9, 14, 16);其中的放置图片的时候,如果图片的右下角的坐标小于左上角的坐标的时候,会发生一下的情况:

 

 

相关文章
|
Java API Android开发
【POI框架实战】——POI设置Excel单元格格式
 “这个excel中的数据怎么不能做加法啊?”、“标头这一行的字体怎么这么小啊,我都看不清”、“这一列能不能换个颜色,明显一些”、“你把这一列的数据给我留两个小数位。”、“这些数据能不能以货币的类型展示啊,就每个三位一个小逗号那种……”
【POI框架实战】——POI设置Excel单元格格式
【POI】使用POI 创建生成XLS,打开xls文件提示【此文件中某些文本格式可能已经更改,因为它已经超出最多允许的字体数。】
 使用POI 创建生成XLS,打开xls文件提示【此文件中某些文本格式可能已经更改,因为它已经超出最多允许的字体数。】       原因: 是因为在POI处理xls的过程中,太多次调用了: HSSFFont font = hssfWorkbook.createFont(); 解决方法: 将font创建为全局变量,在需要使用的地方再调用进行单独的设置。
3094 0
|
6月前
|
Java Apache 索引
POI操作大全(动态合并单元格,为单元格生成一个自定义的数据显示格式,自定义公式计算结果生成,读取excel,word文件在生成图片,word指定位置生成图片)
POI操作大全(动态合并单元格,为单元格生成一个自定义的数据显示格式,自定义公式计算结果生成,读取excel,word文件在生成图片,word指定位置生成图片)
926 0
|
6月前
POI(excel)中表格(单元格)样式应用实践总结
POI(excel)中表格(单元格)样式应用实践总结
122 0
poi往word单元格插入图片,支持本地图片和网络图片
最近word导出时需要导出图片,在网上翻了会就发现了好心人分享的代码,但是只支持本地文件读取,我们项目需要从其他服务器获取图片,那肯定得使用网络方式了,于是在源代码上进行了完善,可接收本地和网络两种url方式。
603 1
POI入门操作Excel单元格
POI入门操作Excel单元格
148 0
|
数据库
poi 读取word 遍历表格和单元格中的图片
poi 读取word 遍历表格和单元格中的图片
478 0
poi 读取word 遍历表格和单元格中的图片
poi 生成word 表格,并向表格单元格中插入多个图片
poi 生成word 表格,并向表格单元格中插入多个图片
448 0
poi 生成word 表格,并向表格单元格中插入多个图片
excel导入poi中的数据使用cell.getStringCellValue()获取报错
excel导入poi中的数据使用cell.getStringCellValue()获取报错
479 0