原题链接在这里:https://leetcode.com/problems/excel-sheet-column-number/ 这道题与Excel Sheet Column Title相呼应。Time O(n), Space O(1). 注意cast时后面的数要加个整体的括号。 AC Java: public class Solution { public int titleToNumber(Strin

这里的代码是介绍使用poi复制一个sheet到另一个excel的sheet中,具体请下如下代码; 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;/** *

* @author trx */public final class CopySheetUtil {

public CopySheetUtil() {

}

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 styleMap = (copyStyle) ? new HashMap()

: null;

for (int i = sheet.getFirstRowNum(); i <= sheet.getLastRowNum(); i++) {

HSSFRow srcRow = sheet.getRow(i);

HSSFRow destRow = newSheet.createRow(i);

if (srcRow != null) {

CopySheetUtil.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 styleMap) {

Set mergedRegions = new TreeSet();

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 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);

}

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 mergedRegions) {

boolean bool = mergedRegions.contains(newMergedRegion);

return !bool;

}}

接着再写一个实现类如下: import org.apache.poi.ss.util.CellRangeAddress;public class CellRangeAddressWrapper implements Comparable {

public CellRangeAddress range;

public CellRangeAddressWrapper(CellRangeAddress theRange) {

this.range = theRange;

}

public int compareTo(CellRangeAddressWrapper craw) {

if (range.getFirstColumn() < craw.range.getFirstColumn()

&& range.getFirstRow() < craw.range.getFirstRow()) {

return -1;

} else if (range.getFirstColumn() == craw.range.getFirstColumn()

&& range.getFirstRow() == craw.range.getFirstRow()) {

return 0;

} else {

return 1;

}

}

}

到此代码结束

java复制sheet_java-poi 复制Sheet到另一个excel的sheet中相关推荐

  1. 将多个文件的Sheet按名称提取,每个作为一个Sheet合并到一个Excel,以文件名作为Sheet名

    将多个文件的Sheet按名称提取,每个作为一个Sheet合并到一个Excel,以文件名作为Sheet名. 工具界面如下: 1.点击  选择需合并的文件  ,选择需要提取的文件.目录中的所有文件,用Ct ...

  2. 合并excel文件 C语言,多个Excel文件中的多个Sheet合并到一个Excel文件中两个函数...

    unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...

  3. easyexcel多个sheet导入_Easypoi实现excel多sheet表导入导出功能

    Easypoi简化了开发中对文档的导入导出实现,并不像poi那样都要写大段工具类来搞定文档的读写. 第一步引入Easypoi依赖 cn.afterturn easypoi-spring-boot-st ...

  4. Java 技术篇-使用poi开源jar包实现读取excel实例演示,poi-3.17.jar获取

    jar 包下载: poi-3.17.jar import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.use ...

  5. 如何把一个excel工作薄中N个工作表复制到另一个工作薄中

    一般遇到标题这样的情况,许多人可能会一个一个的复制粘贴,其实完全不必那么麻烦. 你可以按以下步骤来操作: 第一步:打开所有要操作的excel工作薄\n 第二步:按住Shift键,选择所有要复制的工作表 ...

  6. apache poi 修改docx表格_一个excel(20M)就能干趴你的poi,你信吗(附源码)?

    点击上方"阿拉奇学Java",选择"置顶或者星标" 优质文章第一时间送达! 链接: www.cnblogs.com/rongdi/p/11872810.html ...

  7. 多个excel合并成一个excel的sheet

    1.方案一:使用POI的API 缺点是:数据量稍微大一点生成特别耗时.数据量在3000条记录的样子 优点:不依赖第三方应用,使用POI自己的API完成 建议:小数据量可以满足要求, public cl ...

  8. 用Python批量实现多Excel多Sheet合并的4种方法

    大家好,我是崔艳飞.前两天给大家分享了Python自动化文章:手把手教你利用Python轻松拆分Excel为多个CSV文件,而后在Python进阶交流群里边有读者遇到一个问题,他有很多个Excel表格 ...

  9. python 合并excel 自动更新_手把手教你4种方法用Python批量实现多Excel多Sheet合并

    一.前言 大家好,我是崔艳飞.前两天给大家分享了Python自动化文章:手把手教你利用Python轻松拆分Excel为多个CSV文件,而后在Python进阶交流群里边有读者遇到一个问题,他有很多个Ex ...

最新文章

  1. python 异常处理中try else语句的使用
  2. POJ - 3436 ACM Computer Factory(最大流+输出残余网络)
  3. C语言程序设计——设计一个学生管理系统(完美运行的程序(●‘◡‘●))
  4. Anaconda安装库
  5. C#多线程JOIN方法初探
  6. [分布式训练] 单机多卡的正确打开方式:Horovod
  7. context c语言作用,理解 Go context
  8. c语言小红今年12岁 他父亲比,书人2017秋季四年级期中复习题解析(1-60).pdf
  9. winserver2008 安装elasticsearch
  10. 安卓手机远程连接linux系统,电脑(Linux/Windows)使用SSH远程登录安卓(Android)手机实现无线传输和管理文件(图文详解)-Go语言中文社区...
  11. python批量转换音频格式,flac转mp3等
  12. 第二次去苹果店维修MacBook
  13. 二叉树前序遍历、中序遍历、后序遍历、层序遍历的直观理解
  14. MySQL 核心知识点
  15. 数独求解算法(回溯法和唯一解法)java实现
  16. 【观察】戴尔Lati:以“叠加态”价值新主张,引领智慧办公新时代
  17. java namevaluepair_NameValuePair方式传参数
  18. Java实现 蓝桥杯VIP 算法提高 聪明的美食家
  19. WORKNC2018-2017基础到实战编程视频教程 三四五轴 大模编程
  20. JAVA自学笔记(1)

热门文章

  1. MicroBlaze系列教程(1):AXI_GPIO的使用
  2. c语言用break语句提前结束循环,break语句C语言程序设计.pdf
  3. Liunx userdel删除用户时提示userdel: user *** is currently used by process 12910
  4. 09_NorFlash驱动
  5. VISUAL STUDIO入门使用教程
  6. Java基础---继承、抽象、接口
  7. Qt QVector 详解:从底层原理到高级用法
  8. 【非广告】2021 入门级的 Java 程序员学习路线图 1.0
  9. jack 服务常见错误解决方法
  10. 数字化转型:企业转型的数据治理方式