1.复制单元格

 1 ...
2 public static void copyCell(Workbook wb, Cell srcCell, Cell distCell, boolean copyValueFlag) {
3 //新建单元格样式
4 CellStyle newStyle = wb.createCellStyle();
5 //获取来源的单元格样式
6 CellStyle srcStyle = srcCell.getCellStyle();
7 //将来源的单元格样式克隆到新的单元格样式
8 newStyle.cloneStyleFrom(srcStyle);
9 //样式
10 newStyle.cloneStyleFrom(newStyle);
11 distCell.setCellStyle(newStyle);
12 //克隆单元格的评论
13 if (srcCell.getCellComment() != null) {
14 distCell.setCellComment(srcCell.getCellComment());
15 }
16 // 不同数据类型处理
17 CellType srcCellType = srcCell.getCellTypeEnum();
18 distCell.setCellType(srcCellType);
19 if (copyValueFlag) {
20 if (srcCellType == CellType.NUMERIC) {
21 if (DateUtil.isCellDateFormatted(srcCell)) {
22 distCell.setCellValue(srcCell.getDateCellValue());
23 } else {
24 distCell.setCellValue(srcCell.getNumericCellValue());
25 }
26 } else if (srcCellType == CellType.STRING) {
27 distCell.setCellValue(srcCell.getRichStringCellValue());
28 } else if (srcCellType == CellType.BLANK) {
29
30 } else if (srcCellType == CellType.BOOLEAN) {
31 distCell.setCellValue(srcCell.getBooleanCellValue());
32 } else if (srcCellType == CellType.ERROR) {
33 distCell.setCellErrorValue(srcCell.getErrorCellValue());
34 } else if (srcCellType == CellType.FORMULA) {
35 distCell.setCellFormula(srcCell.getCellFormula());
36 } else {
37 }
38 }
39 }
40 ...

2.行复制

 1 ...
2 /**
3 * 行复制功能
4 *
5 * @param wb 要复制到的Workbook
6 * @param fromRow 复制到的行
7 * @param toRow 来源的行
8 * @param copyValueFlag true的时候赋值里面的值
9 * @return [返回类型说明]
10 * @author 龙谷情
11 * @date 2020/6/9 19:42
12 * @exception/throws [异常类型] [异常说明]
13 * @since [v1.0]
14 */
15 public static void copyRow(Workbook wb, Row fromRow, Row toRow, boolean copyValueFlag) {
16 toRow.setHeight(fromRow.getHeight());
17 for (Iterator cellIt = fromRow.cellIterator(); cellIt.hasNext(); ) {
18 Cell tmpCell = (Cell) cellIt.next();
19 Cell newCell = toRow.createCell(tmpCell.getColumnIndex());
20 //调用单元格赋值方法
21 copyCell(wb, tmpCell, newCell, copyValueFlag);
22 }
23 Sheet worksheet = fromRow.getSheet();
24 //获取合并单元格的数量
25 int mergedRegionsNum = worksheet.getNumMergedRegions();
26 for (int i = 0; i < mergedRegionsNum; i++) {
27 CellRangeAddress cellRangeAddress = worksheet.getMergedRegion(i);
28 if (cellRangeAddress.getFirstRow() == fromRow.getRowNum()) {
29 CellRangeAddress newCellRangeAddress = new CellRangeAddress(toRow.getRowNum(), (toRow.getRowNum() +
30 (cellRangeAddress.getLastRow() - cellRangeAddress.getFirstRow())), cellRangeAddress
31 .getFirstColumn(), cellRangeAddress.getLastColumn());
32 worksheet.addMergedRegionUnsafe(newCellRangeAddress);
33 }
34 }
35 }
36 ...

poi处理excel基本操作时写的工具类的更多相关文章

  1. 30行自己写并发工具类(Semaphore, CyclicBarrier, CountDownLatch)是什么体验?

    30行自己写并发工具类(Semaphore, CyclicBarrier, CountDownLatch)是什么体验? 前言 在本篇文章当中首先给大家介绍三个工具Semaphore, CyclicBa ...

  2. poi报表导出4.1.0版本工具类 导出并下载

    这一段时间,由于项目上线基于稳定,所以我这边在基于我们一期迭代的分支上优化一部分我们之前没有做的功能,报表导出.本身之前用的是3.5的版本,但是由于同事要写导入,写的代码只有4.1.0的版本支持,所以 ...

  3. 自写Date工具类

    以前写项目的时候总是在使用到了时间的转换的时候才在工具类中添加一个方法,这样很容易导致代码冗余以及转换的方法注释不清晰导致每次使用都要重新看一遍工具类.因此整理出经常使用的一些转换,用作记录,以便以后 ...

  4. 写shell工具类,一个常用实例

    简述: 当我们常用到某些指令时,我们就需要将这个命令进行封装.封装的设计和扩展,因人而异.但为了每个人都能够了解到这个命令,常需要写出这个类的help. 关键字: 函数.getopts 函数 通过自定 ...

  5. java POI 导出到word文档 (附工具类)

    1,导入poi相关依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-o ...

  6. 解决java依赖poi导出Excel表时,没有出现下载提示的问题

    转自:https://blog.csdn.net/jinchunzhao123/article/details/88626077 浏览器响应: 而且进入断点调试,所有的数据都执行了就是没有下载提示.而 ...

  7. java中IO写文件工具类

    以下是一些依据经常使用java类进行组装的对文件进行操作的类,平时,我更喜欢使用Jodd.io中提供的一些对文件的操作类,里面的方法写的简单易懂. 当中jodd中提供的JavaUtil类中提供的方法足 ...

  8. less循环写css工具类

    //margin-right=================.mr(100); .mr(@n, @i: 1) when (@i =< @n) { .mr-@{i} { margin-right ...

  9. C#写日志工具类

    代码: using System; using System.Collections.Generic; using System.IO; using System.Linq; using System ...

  10. 含有多个main方法的jar包的运行方式(适用于用java写的工具类)

    如果一个jar中含有多个主程序,而你没有配置默认主程序,或者想要运行指定主程序,则可以通过如下命令执行: Java -cp example03-1.0-SNAPSHOT.jar cn.vicky.ex ...

随机推荐

  1. RocketMQ的Producer是如何发送消息的

    RocketMQ 的 Producer 发送消息过程涉及多个步骤,包括初始化.消息创建.发送方式选择 1.Producer初始化 首先,我们需要创建并初始化一个Producer示例 这段代码完成了以下 ...

  2. rabbitmq学习与总结

    一.rabbitmq的使用场景 1.高并发的流量削峰 举个例子,假设某订单系统每秒最多能处理一万次订单,也就是最多承受的10000qps,这个处理能力应付正常时段的下单时绰绰有余,正常时段我们下单一秒 ...

  3. @EnableAspectJAutoProxy

    开启动态代理配置 官方文档 通过xml配置 <aop:aspectj-autoproxy proxy-target-class="true"/> 通过注解配置 @Ena ...

  4. toRefs 与 toRef 的详解

    一.引言在 Vue 3 的响应式系统里,toRefs 和 toRef 是两个实用的工具函数,它们在处理响应式数据时发挥着重要作用.合理运用这两个函数,可以让我们在操作响应式对象和数组时更加灵活,避免一 ...

  5. RandomWalk随机游走

    RandomWalk随机游走: 在自然界,物理学,生物学,化学,经济学等众多领域,随机游走都有实际的用途,例如,其可以描述一个漂浮在水滴上的花粒因受到水分子的作用力而在水滴表面随机移动.诸如此类的不规 ...

  6. Java编程--简单的Factory程序(工厂设计模式)

    Factory类不是接口.抽象类,就是普通的类. Factory就像一个工厂一样,可以返回很多对象. 子类在继承.实现抽象类和接口后由Factory类处理,由于子类可能会有多个,Factory根据客户 ...

  7. 代码随想录第十八天 | Leecode 530. 二叉搜索树的最小绝对差、501. 二叉搜索树中的众数、236. 二叉树的最近公共祖先

    530. 二叉搜索树的最小绝对差 题目描述 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 . 差值是一个正数,其数值等于两值之差的绝对值. 示例 1: 输入:roo ...

  8. 代码随想录第十一天 | Leecode 150. 逆波兰表达式求值、239. 滑动窗口最大值、347. 前k个高频词

    Leecode 150. 逆波兰表达式求值 题目链接:https://leetcode.cn/problems/evaluate-reverse-polish-notation/description ...

  9. 鸿蒙NEXT开发教程:浅谈@ComponentV2装饰器

    听说今天的广州车展上有一部分人已经看到华为汽车的最后一"界",尊界超豪华大轿车,应该很快就要正式亮相,可以期待一波. 在api12之后,鸿蒙系统推出一个V2版本的状态管理装饰器,不 ...

  10. 图解Spring源码2-Spring Bean元数据体系与Spring容器

    >>>点击去看B站配套视频<<< 系列文章目录和关于我 1. 从一个例子开始 小陈申请加盟咖啡店后,小陈收到总部寄来的<开店规格单>.这份文件允许每家分 ...