Java -- POI -- 随笔汇总
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 -- 随笔汇总的更多相关文章
- Java常用英语汇总(面试必备)
Java常用英语汇总(面试必备) abstract (关键字) 抽象 ['.bstr.kt] access vt.访问,存 ...
- ASP.NET MVC 系列随笔汇总[未完待续……]
ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...
- 使用Beautiful Soup编写一个爬虫 系列随笔汇总
这几篇博文只是为了记录学习Beautiful Soup的过程,不仅方便自己以后查看,也许能帮到同样在学习这个技术的朋友.通过学习Beautiful Soup基础知识 完成了一个简单的爬虫服务:从all ...
- microsoft docx document operation with Java POI library
microsoft docx document operation with Java POI library combine multiple docx document into one docu ...
- 史上最全的 Java 新手问题汇总
史上最全的 Java 新手问题汇总 Java是目前最流行的编程语言之一——它可以用来编写Windows程序或者是Web应用,移动应用,网络程序,消费电子产品,机顶盒设备,它无处不在. 有超过30亿 ...
- java 日志技术汇总(log4j , Commons-logging,.....)
前言 在Tomcat 与weblogic 中的 日志(log4j) 配置系列一 在系列一 中, 有一个问题一直没有解决,就是部署到weblogic 中应用程序如何通过log4j写日志到文件中? 这里仅 ...
- java poi操作excel 添加 锁定单元格保护
Excel的book保护是很常用的,主要是不想让别人修改Excel的时候用.这样能够避免恶意随便修改数据,提高数据的可信度. 下面介绍JAVA POI来实现设置book保护: 使用HSSFSheet类 ...
- 使用Java POI来选择提取Word文档中的表格信息
通过使用Java POI来提取Word(1992)文档中的表格信息,其中POI支持不同的ms文档类型,在具体操作中需要注意.本文主要是通过POI来提取微软2003文档中的表格信息,具体code如下(事 ...
- Java编码问题汇总
转自 http://www.blogjava.net/zhangchao/archive/2011/05/26/351051.html Thanks Java编码问题汇总 工作中经常遇到java编码问 ...
随机推荐
- unity8个入门代码
01,基本碰撞检测代码 function OnCollisionEnter(theCollision:Collision){ if(theCollision.gameObject.name==&quo ...
- 19 个必须知道的 Visual Studio 快捷键
项目相关的快捷键 Ctrl + Shift + B = 生成项目 Ctrl + Alt + L = 显示Solution Explorer(解决方案资源管理器) Shift + Alt+ C = 添加 ...
- 几种php加速器比较
一.PHP加速器介绍 PHP加速器是一个为了提高PHP执行效率,从而缓存起PHP的操作码,这样PHP后面执行就不用解析转换了,可以直接调用PHP操作码,这样速度上就提高了不少. Apache中使用mo ...
- 浅谈压缩感知(二十):OMP与压缩感知
主要内容: OMP在稀疏分解与压缩感知中的异同 压缩感知通过OMP重构信号的唯一性 一.OMP在稀疏分解与压缩感知中的异同 .稀疏分解要解决的问题是在冗余字典(超完备字典)A中选出k列,用这k列的线性 ...
- python2中在sqlite3中插入中文
# -*- coding: utf-8 -*- import sqlite3 conn = sqlite3.connect('SWC_Perf_Info.db') cur = conn.cursor( ...
- Jexus 网站服务器和 ASP.NET 跨平台开发
微软的跨平台战略 微软在过去的一年多中时间中发生了令整个 IT 行业感到惊叹的变化.这一切始于 Ballmer 的退位和 Nadella 的决心,更始于早已在微软各个基层部门蠢蠢欲动的二次创业. 以开 ...
- 阿里云logtail采集IDC机房机器需添加AliUids操作
Configure AliUids for ECS servers under other Alibaba Cloud accounts or on-premises IDCs If Logtail ...
- maven打包含有多个main程序的jar包及运行方式
pom.xml <build> <plugins> <plugin> <groupId> ...
- ajax之async属性
Ajax请求中的async:false/true的作用 官方的解释是:http://api.jquery.com/jQuery.ajax/ async Boolean Default: true By ...
- 新手如何学习 jQuery?
可以看张晓菲的<锋利的jQuery>,重点是自己理解函数用法并自行实现一些常用的效果.如果需要快速查阅可以用这个api,每个函数都附有简单的示例:http://api.jquery.com ...