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. vs配置TFS

  2. 使用 IntraWeb (31) - IntraWeb 的 Xml 操作使用的是 NativeXml

    在 IWNativeXml 单元. 知道了这个, 以后在其他 Delphi 程序中也可以直接 Uses IWNativeXml 了. TNativeXml (IWNativeXml.TNativeXm ...

  3. [Beego模型] 六、事务处理

    [Beego模型] 一.ORM 使用方法 [Beego模型] 二.CRUD 操作 [Beego模型] 三.高级查询 [Beego模型] 四.使用SQL语句进行查询 [Beego模型] 五.构造查询 [ ...

  4. 在AngularJS中使用谷歌地图把当前位置显示出来

    如何使用谷歌地图把当前位置显示出来呢? --在html5中,为我们提供了navigator.geolocation.getCurrentPosition(f1, f2)函数,f1是定位成功调用的函数, ...

  5. Unity Shader-后处理:Bloom全屏泛光

    一.简介   今天来学习一下全屏Bloom效果,有时候也叫Glow效果,中文一般叫做“全屏泛光”,这是一种可以模拟出HDR的全屏后处理效果,但是实现原理与HDR相差很远,效果比HDR差一些,但是比HD ...

  6. redis启动出错Creating Server TCP listening socket 127.0.0.1:6379: bind: No error

    windows下安装Redis第一次启动报错: [2368] 21 Apr 02:57:05.611 # Creating Server TCP listening socket 127.0.0.1: ...

  7. [Python]编码声明:是coding:utf-8还是coding=urf-8呢

    推荐: #!/usr/bin/env python3 # -*- coding: utf-8 -*- 我们知道在Python源码的头文件中要声明编码方式,如果你不只是会用到ascii码,很多人都写得都 ...

  8. LaTeX 中使两张表格并排

    在使用 LaTeX写论文或者画海报的时候,希望两张较小的表格可以并排,(一般情况的LaTeX插入两张图片是上下布局的) 查找了一下,相关的例子如下: \begin{minipage}{\textwid ...

  9. 如何查看memcache的性能

    memcache的运行状态可以方便的用 stats 命令显示.首先用telnet 127.0.0.1 11211这样的命令连接上memcache,然后直接输入stats就可以得到当前memcache的 ...

  10. Swift Defer 延迟调用

    1.Defer 在一些语言中,有 try/finally 这样的控制语句,比如 Java.这种语句可以让我们在 finally 代码块中执行必须要执行的代码,不管之前怎样的兴风作浪.在 Swift 2 ...