这段工作做的是利用JAVA实现Excel的一块区域的复制并粘贴。

就本身对于 Excel跟 鼠标来说,这也是一个非常简单的操作。

但是 用 java的poi来做,还是 有点儿吃力的。

下面是之前做的一个demo。

为了跑动 poi,需要在 pom.xml里面

加入 这个 依赖

        <!-- XSSFWorkbook poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>

调用

 package com.example.demo.controller;

 import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Set;
import java.util.TreeSet; import javax.servlet.http.HttpServletResponse; import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelOutputController { public void outputExcel(HttpServletResponse response) throws IOException {
InputStream excelFile = new FileInputStream("c:/test.xlsx"); Workbook wbsrc = new XSSFWorkbook(excelFile); Sheet oldSheet = wbsrc.getSheetAt(0); Sheet newSheet = wbsrc.getSheetAt(1); int startRow = 0,endRow = 11; int startCol = 0,endCol = 11; int newCellRow = 3,newCellCol =3; copyArea(oldSheet,startRow,endRow,startCol,endCol,newSheet,newCellRow,newCellCol); OutputStream out = null; out = response.getOutputStream(); response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=fff.xlsx"); wbsrc.write(out);
wbsrc.close(); } private void copyArea(Sheet oldSheet, int startRow, int endRow, int startCol, int endCol, Sheet newSheet,
int newCellRow, int newCellCol) { Row oldRow = null;
Row newRow = null; Cell oldCell = null;
Cell newCell = null; List<CellRangeAddress> mergedRegions = oldSheet.getMergedRegions(); Set<String> newMergedRegions = new TreeSet<>(); for(int i = startRow;i<=endRow;i++) {
oldRow = oldSheet.getRow(i);
newRow = newSheet.getRow(newCellRow+i); if(newRow==null) {
newRow = newSheet.createRow(newCellRow+i);
}
for(int j= startCol;j<=endCol;j++) {
oldCell = oldRow.getCell(j);
boolean isNew = false;
CellRangeAddress mergedRegion = judgeMergedRegion(mergedRegions,oldCell);
if(mergedRegion !=null) {
CellRangeAddress newMergedRegion = new CellRangeAddress(mergedRegion.getFirstRow()+newCellRow,
mergedRegion.getLastRow()+newCellRow,mergedRegion.getFirstColumn()+newCellCol,mergedRegion.getLastColumn()+newCellCol);
if(judgeRegionExisted(newMergedRegion,newMergedRegions)) {
isNew = false; } else {
newMergedRegions.add(newMergedRegion.formatAsString());
newSheet.addMergedRegion(newMergedRegion);
isNew =true;
}
} else { //not a mergedRegion
isNew = true;
}
newCell = newRow.getCell(newCellCol+j);
if(newCell == null) {
newCell = newRow.createCell(newCellCol+j);
}
newCell.setCellStyle(oldCell.getCellStyle());
if(isNew) {
switch(oldCell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:
newCell.setCellValue(oldCell.getNumericCellValue());
break;
case Cell.CELL_TYPE_STRING:
newCell.setCellValue(oldCell.getStringCellValue());
break;
case Cell.CELL_TYPE_FORMULA:
newCell.setCellFormula(oldCell.getCellFormula());
break;
case Cell.CELL_TYPE_BLANK:
newCell.setCellType(Cell.CELL_TYPE_BLANK);
break;
case Cell.CELL_TYPE_BOOLEAN:
newCell.setCellValue(oldCell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_ERROR:
newCell.setCellValue(oldCell.getErrorCellValue());
break;
default:
break; }
}
}
}
} private boolean judgeRegionExisted(CellRangeAddress newMergedRegion, Set<String> newMergedRegions) {
return newMergedRegions.contains(newMergedRegion.formatAsString());
} private CellRangeAddress judgeMergedRegion(List<CellRangeAddress> mergedRegions, Cell cell) { for(CellRangeAddress cra:mergedRegions){
if(cra.isInRange(cell))
return cra;
}
return null;
} }

等哪天我能跑交互以后,做一个 跑动的样例出来。

Excel区域复制粘贴的更多相关文章

  1. 个人永久性免费-Excel催化剂功能第44波-可见区域复制粘贴不覆盖隐藏内容

    Excel的复制粘贴操作,每天都在进行,若其中稍能提升一点效率,长久来说,实在是很可观的效率提升. Excel自带的复制粘贴功能,若复制的数据源或粘贴的目标位置中有隐藏的行列内容,简单一个复制粘贴充满 ...

  2. Excel 如何复制粘贴一整行

    在某些时候,我们需要重复性的录入一些信息,而且表头都是一样的,一直拉列宽是相当令人烦躁的事情. 所以,就想可以直接复制黏贴出一整行,包括行的各个列宽. 具体操作如图: ——>首先,一整行复制, ...

  3. 个人永久性免费-Excel催化剂功能第82波-复制粘贴按源区域大小自动扩展收缩目标区域

    日常工作中,复制粘贴的操作,永远是最高频的操作,没有之一,在最高频的操作上,进行优化,让过程更智能,比一天到晚鼓吹人工智能替换人的骇人听闻的新闻来得更实际.此篇带来一点点的小小的改进,让日后无数的复制 ...

  4. WPF的DataGrid控件从excel里复制数据然后粘贴

    WPF的DataGrid控件不能像winform的DataGridView控件一样,支持值的粘贴.WPF的DataGrid控件本质上是跟数据绑定联系在一起,所以需要进行复制粘贴的操作,可以在wpf里用 ...

  5. C# 从excel里面复制的1万6千多条记录粘贴到FCKeditor里面,点保存的时候,保存不了,页面没有反应

    客户那边添加公告,是直接从excel里面复制的,有1万6千多条记录,excel文件有6M多. 编辑器用的FCKeditor,也能粘贴上,就是点保存的时候,执行了一段时间就没有反映了,保存不了. 想着可 ...

  6. excel中的数据粘贴不全到plsql中,excel 粘贴后空白,Excel复制粘贴内容不全

    http://zhidao.baidu.com/link?url=pHZQvfWJzI-lQjl4uP86q4GLcpYHu4o-fdjiYegJS0Cy5HEq5oz0YrUye3iHjmv5CJ3 ...

  7. 按键精灵如何批量复制文本,再往excel里面一次性粘贴?

    原帖地址 http://zhidao.baidu.com/link?url=M2A9E1JF7wAzjtxMQG9uiW_PvP39HVlfwn6zDMzk9m6U05JA37SrgDcrVXg_c9 ...

  8. Excel 2010 如何将筛选后的数据复制粘贴到另一个工作表筛选后的表格里

    如果你是指自动筛选后,把筛选数据复制/粘贴到另外一个工作表中,不妨试试试 第一步选中筛选后的数据区域:第二步执行菜单命令“编辑/定位/定位条件/可见单元格”,确定:第三步单击复制按钮或者Ctrl+C或 ...

  9. 解决:EXCEL复制粘贴,精度丢失

    公司一部分数据是存在elasticsearch里面的,但里面的ID设计得特别长,我是打算把ID号考出来,用jmeter批量 删除的,但复制粘贴到excel里,ID就会精度丢失. 后来找到一个办法,解决 ...

随机推荐

  1. 最简单的Android项目(含有资源文件)

    上次的项目没有使用资源文件,打包出的apk安装后是系统默认图标,程序标题也是包名加类名. 添加资源需要对编译的命令做一点调整. 首先在项目根目录新建res和assets目录,在res内新建drawab ...

  2. jumpserver部署1.0版本

    A. jumpserver概述 跳板机概述: 跳板机就是一台服务器,开发或运维人员在维护过程中首先要统一登录到这台服务器,然后再登录到目标设备进行维护和操作: 跳板机缺点:没有实现对运维人员操作行为的 ...

  3. Python之网路编程之socket简单介绍

    一.网络协议 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构(互联网中处处是C/S架构):B/S架构也是C/S架构的一种,B/S是浏览器/服务器 C/S架构与socket的关系: ...

  4. autogen.sh 的使用

    在linux下面的大型工程很多都是makefile管理的,但是随着工程越来越大,makefile编写又成了一个大工程,这个时候出现了两个比较流行的工具,cmake和configure,configur ...

  5. 查看 XML 文件

    在所有现代浏览器中,均能够查看原始的 XML 文件. 不要指望 XML 文件会直接显示为 HTML 页面. 查看 XML 文件 查看这个 XML 文件:note.xml 打开 XML 文件 - XML ...

  6. Thymeleaf 2-基础语法

    三.基础语法 1.创建HTML 由上文也可以知道需要在html中添加: <html xmlns:th="http://www.thymeleaf.org"> 这样,下文 ...

  7. [CSP-S模拟测试]:取石子(博弈论+DP)

    题目描述 有三堆石子,它们的石子个数分别为$x,y,z$.$A$和$B$正在博弈,由$A$先手,双方轮流操作.每次操作是指,选择若干堆($1-3$堆)石子,从中各取出相同数量的石子(不能$1$个都不取 ...

  8. Mysql中 BLOB字段转String的方法

    转:https://www.cnblogs.com/renjie0520/p/5242350.html 1.通过sql直接转换 select CONVERT (*** USING utf8) AS u ...

  9. Hashtable 和 HashMap 的区别是:

    HashMap 是内部基于哈希表实现,该类继承AbstractMap,实现Map接口 Hashtable 线程安全的,而 HashMap 是线程不安全的 Properties 类 继承了 Hashta ...

  10. JavaScript难点笔记

    前言 由于工作需求重新回顾了一下JavaScript,以下内容是我以前的学习笔记和其他参考资料整理完善后的内容,都是常用到的,使用频率比较高的,自己必须得精通的知识点的总结,便以后再复习参考. 第一章 ...