1. 判断指定的单元格是否是合并单元格

    /**
* 功能:判断指定的单元格是否是合并单元格
* 原理:excel中的合并单元格其实就是首单元格,只不过该单元格增加了 rowspan和colspan两个属性。
* 并且把该单元格的高度和宽度变成(例如rowspan=2,colspan=3)2行,3列的的标尺长度,再把被合并的单元格(除了首单元格的其余5个单元格)隐藏。
* @param wsheet
* @param row
* @param column
* @return
*/
private Integer isMergedRegion(Sheet wsheet, int row, int column) {
//getNumMergedRegions:得到所有区域
for(int i = 0;i < wsheet.getNumMergedRegions();i++){
//根据索引获取指定的合并单元区域
CellRangeAddress range = wsheet.getMergedRegion(i);
int firstColumn = range.getFirstColumn();
int lasColumn = range.getLastColumn();
int firstRow = range.getFirstRow();
int lastRow = range.getLastRow();
if(row >= firstRow && row <= lastRow){
if(column >= firstColumn && column <= lasColumn){
return i;
}
}
}
return -1;
}

2. 插入图片

public void addPictrue(String imgPath,HSSFSheet sheet, HSSFWorkbook wb){
BufferedImage bufferImg = null;
//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
try {
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); bufferImg = ImageIO.read(new File(imgPath));
//这里要注意,第二个参数将会决定插入图片形式,如果是一个png的图片,背景透明,但是此处设置为jpg格式将会自动添加黑色背景
ImageIO.write(bufferImg, "png", byteArrayOut);
//画图的顶级管理器,一个sheet只能获取一个
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
//anchor主要用于设置图片的属性
//dx1、dy1、dx2、dy2、col1,row1,col2,row2
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 255, 255,(short) 9, 0, (short) 11, 0);
anchor.setAnchorType(2);
//插入图片
patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG)); } catch (Exception e) {
e.printStackTrace();
}finally{
}
}

3. 合并单元格

        //Test of Merging
Row row = firstSheet.createRow(1);
Cell cell = row.createCell(1);
cell.setCellValue("test of merging");
//firstRow、lastRow、firstCol、lastCol
firstSheet.addMergedRegion(new CellRangeAddress(1,1,1,4));

4.

        //设置生成Excel中公式自动计算
wsheet.setForceFormulaRecalculation(true);

5.

            //获取所有合并单元格的个数
sheet.getNumMergedRegions();

6.

            //获取指定索引的合并区域
region = sheet.getMergedRegion(i);

7.

                //拷贝合并区域
CellRangeAddress newRegion = region.copy();

8.

                //设置合并区域的首行、首列、最后行、最后列
newRegion.setFirstRow(targetRowFrom);
newRegion.setFirstColumn(region.getFirstColumn());
newRegion.setLastRow(targetRowTo);
newRegion.setLastColumn(region.getLastColumn());

9.

                //向工作簿中添加合并区域
sheet.addMergedRegion(newRegion);

10.

            //获取当前行的最后列索引
columnCount = sourceRow.getLastCellNum();

11. 设置合并单元格样式

    /**
* 功能:设置合并单元格样式
* @param cellStyle
* @param rangeAddress
* @param wsheet
*/
private void setRegionStyle(CellStyle cellStyle, CellRangeAddress rangeAddress, Sheet wsheet) {
for(int i = rangeAddress.getFirstRow();i <= rangeAddress.getLastRow();i++){
Row row = wsheet.getRow(i);
if(null == row){
row = wsheet.createRow(i);
}
for(int j = rangeAddress.getFirstColumn();j <= rangeAddress.getLastColumn();j++){
Cell cell = row.getCell(j);
if(null == cell){
cell = row.createCell(j);
cell.setCellValue("");
}
cell.setCellStyle(cellStyle);
}
}
}

12. 转换坐标(B3)为行列值(row=4、col=1)

        //得到列 字母
String lineStr = "";
String reg = "[A-Z]+";
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(point);
while (m.find()) {
lineStr = m.group();
}
//将列字母转成列号 根据ASCII转换
char[] ch = lineStr.toCharArray();
int column = 0;
for (int i = 0; i < ch.length; i++) {
char c = ch[i];
int post = ch.length - i - 1;
int r = (int) Math.pow(10, post);
column = column + r * ((int) c - 65);
}
tempCell.setColumn(column); //得到行号
reg = "[1-9]\\d*";
p = Pattern.compile(reg);
m = p.matcher(point);
while (m.find()) {
tempCell.setRow((Integer.parseInt(m.group()) - 1));
}

13.

啦啦啦

Java -- POI -- 随笔汇总的更多相关文章

  1. Java常用英语汇总(面试必备)

    Java常用英语汇总(面试必备) abstract (关键字)             抽象 ['.bstr.kt] access                            vt.访问,存 ...

  2. ASP.NET MVC 系列随笔汇总[未完待续……]

    ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...

  3. 使用Beautiful Soup编写一个爬虫 系列随笔汇总

    这几篇博文只是为了记录学习Beautiful Soup的过程,不仅方便自己以后查看,也许能帮到同样在学习这个技术的朋友.通过学习Beautiful Soup基础知识 完成了一个简单的爬虫服务:从all ...

  4. microsoft docx document operation with Java POI library

    microsoft docx document operation with Java POI library combine multiple docx document into one docu ...

  5. 史上最全的 Java 新手问题汇总

    史上最全的 Java 新手问题汇总   Java是目前最流行的编程语言之一——它可以用来编写Windows程序或者是Web应用,移动应用,网络程序,消费电子产品,机顶盒设备,它无处不在. 有超过30亿 ...

  6. java 日志技术汇总(log4j , Commons-logging,.....)

    前言 在Tomcat 与weblogic 中的 日志(log4j) 配置系列一 在系列一 中, 有一个问题一直没有解决,就是部署到weblogic 中应用程序如何通过log4j写日志到文件中? 这里仅 ...

  7. java poi操作excel 添加 锁定单元格保护

    Excel的book保护是很常用的,主要是不想让别人修改Excel的时候用.这样能够避免恶意随便修改数据,提高数据的可信度. 下面介绍JAVA POI来实现设置book保护: 使用HSSFSheet类 ...

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

    通过使用Java POI来提取Word(1992)文档中的表格信息,其中POI支持不同的ms文档类型,在具体操作中需要注意.本文主要是通过POI来提取微软2003文档中的表格信息,具体code如下(事 ...

  9. Java编码问题汇总

    转自 http://www.blogjava.net/zhangchao/archive/2011/05/26/351051.html Thanks Java编码问题汇总 工作中经常遇到java编码问 ...

随机推荐

  1. ext2文件系统学习(一)

    源码分析网上太多了,不写了,记录简单的实践步骤: 1. 创建ext2文件镜像并映射 cd /tmp count= mkfs.ext2 ext2-1M.img mkdir ext2 sudo mount ...

  2. 9、SQL逻辑查询语句执行顺序

    本篇导航: SELECT语句关键字的定义顺序 SELECT语句关键字的执行顺序 准备表和数据 准备SQL逻辑查询测试语句 执行顺序分析 一.SELECT语句关键字的定义顺序 SELECT DISTIN ...

  3. 为什么用svg放弃了iconfont?

    svg替代iconfont的好处(无论是基于Vue.Jquery),都推荐svg http://www.woshipm.com/pd/463866.html svg图标库,svg图标在线制作 http ...

  4. eclipse:报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

    JavaWeb: 报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Bui ...

  5. UVA 12293 - Box Game(博弈)

    UVA 12293 - Box Game 题目链接 题意:两个盒子,一開始一个盒子有n个球.一个仅仅有1个球,每次把球少的盒子中球消掉,把多的拿一些球给这个盒子.最后不能操作的输(球不能少于1个),A ...

  6. Linux编译步骤概述

    Linux,一切皆文件! linux环境下,编译源码文件步骤总结 01.下载解压 一遍在开源网站有download/下载页面 02.安装基本编译环境 yum install -y gcc gcc-c+ ...

  7. NodeJs相关系列文章

    1.图片上传之FileAPI与NodeJs 2.NodeJs之调试 3.CentOS下使用NVM 4.NodeJs之进程守护 5.Ubuntu下使用nvm 6.NodeJs之pm2 7.NodeJs之 ...

  8. Socketserver 笔记

    引入Socketserver的背景: 我们之前使用socket编程的时候,Server端创建一个连接循环(建立连接)+一个通信循环(基于一次连接建立通信循环),(这里的黏包问题我们的实现方式是:我们在 ...

  9. 微信小程序跳转分析

    对于路由的触发方式以及页面生命周期函数如下: 路由方式 触发时机 路由前页面 路由后页面 初始化 小程序打开的第一个页面   onLoad, onShow 打开新页面 调用 API wx.naviga ...

  10. github desktop的使用

    1.建仓库 2.添加文件 3.提交文件到本地仓库 4.撤销提交到本地仓库 或者直接Ctrl+Z 5.提交到远端仓库 6.添加一个分支 7.分支合并 1.本地仓库合并 将新分支添加的文件合并到maste ...