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

使用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);其中的放置图片的时候,如果图片的右下角的坐标小于左上角的坐标的时候,会发生一下的情况:

 

 

posted @ 2016-07-14 14:37  Angel挤一挤  阅读(2187)  评论(0编辑  收藏  举报