Java 操作POI 之复制sheet页
2019独角兽企业重金招聘Python工程师标准>>>
来点干货直接上代码,就不细说了
package com.qs.web.tools.core.excel;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.ss.util.CellRangeAddress;
public class ExcelCopySheetUtil {
public ExcelCopySheetUtil() {
}
public static void copySheets(HSSFSheet newSheet, HSSFSheet sheet) {
copySheets(newSheet, sheet, true);
}
public static void copySheets(HSSFSheet newSheet, HSSFSheet sheet,
boolean copyStyle) {
int maxColumnNum = 0;
Map<Integer, HSSFCellStyle> styleMap = (copyStyle) ? new HashMap<Integer, HSSFCellStyle>()
: null;
for (int i = sheet.getFirstRowNum(); i <= sheet.getLastRowNum(); i++) {
HSSFRow srcRow = sheet.getRow(i);
HSSFRow destRow = newSheet.createRow(i);
if (srcRow != null) {
ExcelCopySheetUtil.copyRow(sheet, newSheet, srcRow, destRow,
styleMap);
if (srcRow.getLastCellNum() > maxColumnNum) {
maxColumnNum = srcRow.getLastCellNum();
}
}
}
for (int i = 0; i <= maxColumnNum; i++) { //设置列宽
newSheet.setColumnWidth(i, sheet.getColumnWidth(i));
}
}
/**
* 复制并合并单元格
* @param newSheet
* @param sheet
* @param copyStyle
*/
public static void copyRow(HSSFSheet srcSheet, HSSFSheet destSheet,
HSSFRow srcRow, HSSFRow destRow,
Map<Integer, HSSFCellStyle> styleMap) {
Set<CellRangeAddressWrapper> mergedRegions = new TreeSet<CellRangeAddressWrapper>();
destRow.setHeight(srcRow.getHeight());
int deltaRows = destRow.getRowNum() - srcRow.getRowNum(); //如果copy到另一个sheet的起始行数不同
for (int j = srcRow.getFirstCellNum(); j <= srcRow.getLastCellNum(); j++) {
HSSFCell oldCell = srcRow.getCell(j); // old cell
HSSFCell newCell = destRow.getCell(j); // new cell
if (oldCell != null) {
if (newCell == null) {
newCell = destRow.createCell(j);
}
copyCell(oldCell, newCell, styleMap);
CellRangeAddress mergedRegion = getMergedRegion(srcSheet,
srcRow.getRowNum(), (short) oldCell.getColumnIndex());
if (mergedRegion != null) {
CellRangeAddress newMergedRegion = new CellRangeAddress(
mergedRegion.getFirstRow() + deltaRows,
mergedRegion.getLastRow() + deltaRows, mergedRegion
.getFirstColumn(), mergedRegion
.getLastColumn());
CellRangeAddressWrapper wrapper = new CellRangeAddressWrapper(
newMergedRegion);
if (isNewMergedRegion(wrapper, mergedRegions)) {
mergedRegions.add(wrapper);
destSheet.addMergedRegion(wrapper.range);
}
}
}
}
}
/**
* 把原来的Sheet中cell(列)的样式和数据类型复制到新的sheet的cell(列)中 *
* @param oldCell
* @param newCell
* @param styleMap
*/
public static void copyCell(HSSFCell oldCell, HSSFCell newCell,
Map<Integer, HSSFCellStyle> styleMap) {
if (styleMap != null) {
if (oldCell.getSheet().getWorkbook() == newCell.getSheet()
.getWorkbook()) {
newCell.setCellStyle(oldCell.getCellStyle());
} else {
int stHashCode = oldCell.getCellStyle().hashCode();
HSSFCellStyle newCellStyle = styleMap.get(stHashCode);
if (newCellStyle == null) {
newCellStyle = newCell.getSheet().getWorkbook()
.createCellStyle();
newCellStyle.cloneStyleFrom(oldCell.getCellStyle());
styleMap.put(stHashCode, newCellStyle);
}
newCellStyle.setLocked(false);
newCell.setCellStyle(newCellStyle);
}
}
switch (oldCell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
newCell.setCellValue(oldCell.getStringCellValue());
break;
case HSSFCell.CELL_TYPE_NUMERIC:
newCell.setCellValue(oldCell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
newCell.setCellType(HSSFCell.CELL_TYPE_BLANK);
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
newCell.setCellValue(oldCell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_ERROR:
newCell.setCellErrorValue(oldCell.getErrorCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
newCell.setCellFormula(oldCell.getCellFormula());
break;
default:
break;
}
}
// 获取merge对象
public static CellRangeAddress getMergedRegion(HSSFSheet sheet, int rowNum,
short cellNum) {
for (int i = 0; i < sheet.getNumMergedRegions(); i++) {
CellRangeAddress merged = sheet.getMergedRegion(i);
if (merged.isInRange(rowNum, cellNum)) {
return merged;
}
}
return null;
}
private static boolean isNewMergedRegion(
CellRangeAddressWrapper newMergedRegion,
Set<CellRangeAddressWrapper> mergedRegions) {
boolean bool = mergedRegions.contains(newMergedRegion);
return !bool;
}
}
转载于:https://my.oschina.net/zhangdayue/blog/419354
Java 操作POI 之复制sheet页相关推荐
- Java Excel 复制单元格 poi Excel 复制单元格 Java Excel 复制行 Java Excel 复制 sheet 页 poi excel copy
Java Excel 复制单元格 poi Excel 复制单元格 Java Excel 复制行 Java Excel 复制 sheet 页 一.前言 1.本文记录 poi excel 实现 单元格ce ...
- Java操作poi导出Excel自定义字体颜色
Java操作poi导出Excel自定义字体颜色 功能介绍 POI操作Excel 第一步创建一个导出的工具类 整体定义表格字体样式 自定义表格字体样式 总结 功能介绍 Apache POI 是用Java ...
- java excel 晒新年操作_java操作Excel的poi 创建一个sheet页
package com.java.poi; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.us ...
- poi操作excel,复制sheet,复制行,复制单元格 .
http://blog.csdn.net/wutbiao/article/details/8696446 项目中,我们经常使用Poi来操作excel,但是经常碰到一个不方便的地方,不如最简单常用的,在 ...
- poi操作excel,复制sheet,复制行,复制单元格
项目中,我们经常使用Poi来操作excel,但是经常碰到一个不方便的地方,不如最简单常用的,在两个excel之间复制sheet,复制行,复制单元格等. 我这里是最近刚做的一个简单封装.不是很好,必须始 ...
- 使用poi复制sheet页,拷贝sheet,sheet插入行,复制行
复制sheet //读取excel模板XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(filePath + "赎回明 ...
- POI删除所有sheet页
使用POI删除Sheet页时,不能使用下面的代码循环删除.因为执行一遍后第二个sheet页的下标变成了0,但是i变成了1,所以循环里面应该放workbook.removeSheetAt(0); f ...
- Java 使用 POI 为 word 添加页眉 获取页眉
在百度上和goole都没找到我想要的东西,看了他的接口注释他的官方文档之后才得到了这个解决方案 // POI方案为word添加页眉public static void main(String[] ar ...
- Java操作poi添加页眉页脚:字体_颜色_大小
Excel中的页眉或页脚仅在页面布局模式和打印预览模式才可见.我们可以在页眉页脚位置添加页码.工作表名.日期.文字.图片等信息.本文将通过Java代码示例来介绍页眉页脚的添加方法. 使用工具: Fre ...
最新文章
- mysql dump 查看器_mysql备份之mysqldump工具
- 树莓派4视频输出接口_树莓派第四代来啦!4G内存、支持双屏4K输出和H265硬解
- 01. elasticsearch certification 练习题
- 哈弗f5i潮配置参数_10万元起售的潮人新玩法,哈弗F5国潮版购车手册
- java 迷你桌面地图_求教贴,Java桌面小游戏的地图怎么做
- git使用过程及常用命令
- GCC编译的几个步骤
- mybatis进阶(动态sql、关系映射、延迟加载、缓存)
- 高等数学 - 两平面的夹角
- web端前端自定义提示语信息
- 这篇文章能让你吃透SVG
- IDEA的Translation翻译插件失效
- 蚂蚁算法python_Python编程实现蚁群算法详解
- CSS段落间距调整 P标签段落上下距离如何设置
- 聚焦手机操作系统 运营商的“门户”之战
- 黑客又没有工资,那他们靠什么来维持生活?答案说出让人意外!
- 傻白探索Chiplet,国内外研究现状(六)
- PostgreSQL学习篇9.5 货币类型
- PX4固定翼调试校准流程及实验相关问题记录分析
- 网络协议与服务的区别/关系
热门文章
- 科技前沿智能创新 2019北京智能家居 全屋智能博览会
- ubuntu7.10安装到3D开启
- bupt summer training for 16 #8 ——字符串处理
- PHP:6种GET和POST请求发送方法
- 《NoSQL权威指南》导读
- Elasticsearch学习笔记-04.3批处理
- Java 之 JavaScript (一)
- Android在第三方应用程序系统应用尽早开始,杀死自己主动的第三方应用程序,以重新启动...
- python中loop函数_python + Django 的forloop功能试验讲解
- zabbix4.2 系列(二):agent配置