【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:[email protected]?"+"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 }

效果如下:

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

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

anchor.setAnchorType(AnchorType.DONT_MOVE_DO_RESIZE);

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

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

时间: 2024-10-07 12:31:13

【POI】使用POI处理xlsx的cell中的超链接 和 插入图片的相关文章

TFS中Web管理编辑器插入图片路径问题

在使用TFS的Web管理,新建工作时在编辑器中添加附件,成功之后在编辑器中经常无法正常显示(没有使用机器名访问TFS服务器.或者跟服务器不同的域或者使用外网地址访问等). 首先找到: Microsoft Team Foundation Server 12.0\Application Tier\Web Services\web.config文件中的 <compilation defaultLanguage="c#" explicit="true" debug=&

VS2012中MFC 操作mshflexgrid插入图片

CPictureHolder pic,picSection; pic.CreateFromBitmap(IDB_BITMAP); LPDISPATCH pPic = pic.GetPictureDispatch(); m_Grid.put_ROW(1); m_Grid.put_Col(1); m_Grid.putref_CellPicture(pPic);

java POI实现向Excel中插入图片

java POI实现向Excel中插入图片 标签: javapoiexcel 2014-03-05 08:59 9103人阅读 评论(4) 收藏 举报  分类: [JAVA开发]-----JavaScore(34)  版权声明:本文为博主原创文章,未经博主允许不得转载. 做Web开发免不了要与Excel打交道.今天老大给我一个任务-导出Excel.开始想的还是蛮简单的,无非就是查找,构建Excel,response下载即可.但是有一点不同,就是要加入图片,就是这个加入图片搞了好久.同时网络上确实

使用Java POI来选择提取Word文档中的表格信息

通过使用Java POI来提取Word(1992)文档中的表格信息,其中POI支持不同的ms文档类型,在具体操作中需要注意.本文主要是通过POI来提取微软2003文档中的表格信息,具体code如下(事先需要导入POI的jar包): public static void testWord2() { try { FileInputStream in = new FileInputStream("july 2005 1.doc");// 载入文档 // FileInputStream in

POI插入图片至Excel使用固定的长宽

使用POI在Excel里插入图片,如何使插入的图片使用固定的大小?先介绍原有的两种方式: 一种是指定开始和结尾单元格,然后从头画到尾,相当于平铺 还有一种就是仅指定开始的单元格,图片的大小跟这个单元格的长宽有关,可以放大缩小固定的倍数,相当于左对齐 第一种效果如下: 第二种效果如下: 第一种方法的关键代码如下: 1 private void pictureToSheet(Sheet finalSheet, Row row, Cell cell, int pictureIdx) { 2 Drawi

Java利用poi生成word(包含插入图片,动态表格,行合并)

转: Java利用poi生成word(包含插入图片,动态表格,行合并) 2018年12月20日 09:06:51 wjw_11093010 阅读数:70 Java利用poi生成word(包含插入图片,动态表格,行合并) 测试模板样式: Word生成结果: 图表 2需要的jar包:(具体jar可自行去maven下载) 注意:需要严格按照上面版本下载jar包,否则可能出现jar包之间不能匹配的导致代码报错 各种 jar包都可以在这里下载: https://mvnrepository.com/ Tes

Swift设置Table View的Cell中Lable自适应内容高度的

@IBOutletweak var myTableView: UITableView! override func viewDidLoad() { super.viewDidLoad() myTableView.estimatedRowHeight = 44.0 myTableView.rowHeight =UITableViewAutomaticDimension } 最后修改在Table Cell中Label的lines属性,将其设置为0.

iOS 在tableview的cell中的button上,添加选中状态的解答

大家都知道tableview的复用当然不知道的话可以个我留言或者在网上找  在这我就不多说了: 红色就是选中状态,但是这时候我们会发现往下拉当cell消失后出来新的cell中的button也是选中状态.话不多说下面上解决方法的代码! -(NSMutableArray *)boolArr{ //创建一个数组在这里数组中的NSNumber对象的下标是于 indexPath一一对应的这里我给他一百个根据自身的情况赋值 if (_boolArr==nil) { NSMutableArray *arr =

关于cell中添加子视图 复用重叠问题的解决方法

问题本质: 因为你要添加的子视图并不是在自定义的cell中实现的,而是根据系统给的UITableViewCell这个类创建的实例,每次进图 cellForRow方法都会创建一个cell,每次都要创建一个子视图添(button,label之类的)加进去,会给占用很大的内存,所以采用了复 用的方法,但是问题就来了,当cell超出界面,从队列中拿过来复用的时候,其中子视图的内容并没有消除,这样你会原来的基础上再创建一个子视图添加上去 遮住了原来的视图,一般视图都是透明的这样的话就变成了一层层的叠加.