excel文件拷贝

2023-11-10

package cn.sos.until;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;

poi.jar免费下载地址→http://download.csdn.net/download/cjava_math/9950387

/**

  • 拷贝Excel通用工具类,(给一个源文件的路径,拿去直接用)
  • @author lannan

*/
public class CopyExcel {

/**
 * 拷贝Excel到新的Excel中
 * 
 * @param fromPath:源excel的存放路径
 * @throws IOException 
 */
public static void CopyExcelToAntherExcel(String fromPath) throws IOException{
	
	//以当前拷贝时间为新excel文件名的后半部
	DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
	Calendar calendar = Calendar.getInstance();
	String dateName = df.format(calendar.getTime());
	
	
	String toPath = "D:\\";//新excel保存路径
	
	String excelName = "数据"+dateName;//新excel文件名
	
	//创建新的excel
	HSSFWorkbook wbCreat = new HSSFWorkbook();
	
	File file = new File(fromPath);
	//打开excel
	InputStream in = new FileInputStream(file);
	
	HSSFWorkbook wb = new HSSFWorkbook(in);
	
	for (int i = 0; i < wb.getNumberOfSheets(); i++) {
		
		HSSFSheet sheet = wb.getSheetAt(i);
		
		HSSFSheet sheetCreat = wbCreat.createSheet(sheet.getSheetName());
		
		//复制源表中的合并单元格
		MergerRegion(sheetCreat, sheet);
		int firstRow = sheet.getFirstRowNum();
		int lastRow = sheet.getLastRowNum();
		for (int j = firstRow; j <= lastRow; j++) {
			
			//创建新建excel sheet的行
			HSSFRow rowCreat = sheetCreat.createRow(j);
			
			//取的原有excel sheet的行
			HSSFRow row = sheet.getRow(j);
			
			//单元格样式
			int firstCell = row.getFirstCellNum();
			int lastCell = row.getLastCellNum();
			for (int k = firstCell; k <= lastCell; k++) {
				
				rowCreat.createCell(k);
				String strVal = "";
				if (row.getCell(k)==null) {
					
				}else {
					strVal = removeInternalBlank(row.getCell(k).getStringCellValue());
				}
				rowCreat.getCell(k).setCellValue(strVal);
				
			}
		}
	}
	
	FileOutputStream fileOut = new FileOutputStream(toPath+excelName+".xls");
	wbCreat.write(fileOut);
	fileOut.close();
	wbCreat.close();
	wb.close();
}





/**
 * 复制原有的sheet的合并单元格到新创建的sheet
 * @param sheetCreat : 新创建的sheet
 * @param sheet : 原有的sheet
 */
public static void MergerRegion(HSSFSheet sheetCreat,HSSFSheet sheet){
	
	int sheetMergerCount = sheet.getNumMergedRegions();
	
	for (int i = 0; i < sheetMergerCount; i++) {
		
		CellRangeAddress mergedRegionAt = sheet.getMergedRegion(i);
		
		sheetCreat.addMergedRegion(mergedRegionAt);
	}
}


/**
 * 去除字符串内部空格
 * @param s
 * @return
 */
public static String removeInternalBlank(String s){
	
	Pattern p = Pattern.compile("\\s*|\t|\r|\n");
	Matcher m = p.matcher(s);
	char str[] = s.toCharArray();
	StringBuffer sb = new StringBuffer();
	for (int i = 0; i < str.length; i++) {
		if (str[i]==' ') {
			sb.append(' ');
		}else {
			break;
		}
	}
	
	String after = m.replaceAll("");
	
	return sb.toString()+after;
}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

excel文件拷贝 的相关文章

  • VBA 使用 Like 运算符删除行

    简单的事情并不简单 我试图根据具有以 2L 开头的数据的特定列删除行 所以我写了这段代码 LastRow可以理解 Sub Cleanup For i 1 To LastRow If Range F i Like 2L Then Rows i
  • 在 Swift 应用程序中从 Excel 文档读取数据

    我有一个 Excel 文档 其中包含一些表格和大量数据点 我想从中读取内容以填充一些 UICollectionView 单元格和我的应用程序的其他部分 就像是 Country Temperature Cost Spain 23 80 Fra
  • 过滤所有独特的项目,例如 Google 文档

    是否有一种快速 简单的方法来过滤 Excel 2013 列中的所有唯一项目 类似于 Google Docs 唯一 功能 这不是一个漂亮的答案 但它有效 将其作为数组公式粘贴到单元格中B2 LOOKUP 2 1 COUNTIF B 1 B1
  • Excel 自动填充列 X++++..Y++..Z+

    如何自动填充之间的值 选择 A 列 CTRL G gt Blanks gt OK Type press UpArrow 然后按CTRL ENTER See 这个链接 http www techrepublic com blog msoffi
  • 延迟宏以允许事件完成

    在尝试从宏内访问外部 API 函数集时 我发现有必要添加延迟 以便外部 API 有时间处理选择 实现这一点会带来一些困难 因为使用 Application Wait 或 Application Sleep 不起作用 在线搜索让我尝试使用 G
  • 如何将 JavaScript 图表导出到 Excel 文件 (HighCharts)

    我必须将 Javascript 图表 HighCharts 导出到 Excel 文件中 图表在div中呈现 但excel不呈现javascript生成的html css内容 仅呈现没有样式的文本 一个解决方案是将图表渲染为图像 jpeg 但
  • 将最后几个功能添加到我的调度模板生成器中

    感谢 StackOverflow 上的一些出色的人 我几乎完成了调度模板生成器的代码 我还想补充三件事 但我遇到了一些麻烦 当前细分 我有两张表 2 员工列表 和 X 模板 员工列表中的值是从单元格 D9 开始的一列员工姓名 然后将员工值转
  • 文本到行 VBA Excel

    我有一个电子表格 其中包含大约 4000 行数据 其中一列数据具有唯一的订单号 我希望使用 作为分隔符将其分隔 所以本质上我想要 Name Order Date Jane 123 001 111 08 15 2013 Gary 333 12
  • Perforce Excel 文件差异

    我有一堆 excel 文件放在 perforce 上 我想对这些 excel 文件进行 diff 类似于我在 perforce 中对其他文件 如 java cs 等 所做的操作 我尝试寻找一个插件 发现 P4OFC 只适合对 word 文件
  • 将范围内的每个值乘以常数,但跳过空白单元格

    我需要一个简单快速的解决方案 用于将范围内的所有值乘以 VBA 代码中的数值 我知道这个解决方案 将整个范围乘以值 https stackoverflow com questions 18990541 multiply entire ran
  • 使用 VBA 的下拉菜单

    我需要使用 VBA 从下拉菜单中选择特定选项 我怎样才能做到这一点 链接到我们试图从中提取的网页 IE document getElementsByName down count click 我尝试过的代码 Full Module Priv
  • 当时间为 00:00 时,Pandas 读取 excel 返回类型对象

    在更新版本的 Pandas 中 我使用的是 1 2 3 当从 Excel 文件读取时间时 时间为 00 00 00 时会出现问题 下面的脚本 其中 filepath 是我的 Excel 文件的路径 其中包含一个标题名为 Time 的列 im
  • 合并和颜色样式不适用于 Apache POI excel 2003 格式

    在 Apache POI 中 我为某些单元格应用了一些样式并合并了这些单元格 当我在 2010 年或 2007 年打开时 它工作正常 但在 2003 年 格式样式消失了 每次保存 2003 Excel 文件之前都会弹出兼容性检查对话框 请参
  • Office excel将CORS请求作为跨域请求

    我正在尝试从我的 Excel 插件发出跨域请求 正如这里所建议的 http dev office com docs add ins develop addressing same origin policy limitations http
  • 在合并的单元格中选择、插入照片并将其居中

    我是一名研发面包师 正在为我的团队制作食谱模板 模板中有照片 但我需要轻松地允许他们单击一个按钮 打开照片的文件选择器 然后将该照片放在合并的单元格中 我其实不太擅长做这个 Sub InsertPhotoMacro Dim photoNam
  • VBA 完成 Internet 表单

    我正在寻找将 Excel 中的值放入网页的代码 Sub FillInternetForm Dim IE As Object Set IE CreateObject InternetExplorer Application IE naviga
  • 将包含宏的工作簿复制到不带宏的工作簿

    我能够复制工作簿 复制到所需位置 其中在后台包含宏 该副本还包含相同的宏 我的问题是我不希望这个重复的工作簿包含宏 谁能告诉怎么做吗 先感谢您 将您的工作簿保存为无宏 即简单地保存为 Excel 工作簿 对于我的 Excel 2007 这是
  • 我可以获取VBA代码中的注释文本吗

    可以说我有以下内容 Public Sub Information TEST End Sub 有没有办法得到 TEST 结果 不知何故通过VBA 例如 在 PHP 中 有一个获取注释的好方法 这里有什么想法吗 编辑 应该有办法 因为像 MZ
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2

随机推荐

  • 一个测试的成长历程【功能测试篇】——web测试的总结

  • js自写发布订阅模块

    实现效果如下图所示 代码如下
  • 【论文阅读】文献阅读笔记-泊松重建

    先了解泊松分布 就二项分布而言 泊松分布可以是二项分布的推广 样本数趋向于无穷大 而事件发生的概率趋近于0时 此时期望满足np Lamda 常数 且此时事件发生的概率满足泊松分布 且概率的计算只与Lamda有关 但泊松方程和泊松分布没啥关系
  • 微信小程序实现扫二维码时仿微信扫码音效

    需求分析 使用wx scanCode时无交互感 对用户来说没有反馈 故增加扫码成功时震动及播放微信扫码音效 index html
  • 一些关于c语言if语句的练习

    练习题1 在终端输入一个整数 用来表示学生的成绩 输出学生成绩对应的等级 90 100 A 80 90 B 70 80 C 60 70 D 0 60 不及格 练习题2 在终端输入一个整数 用来表示年份 输出这一年是平年还是闰年 闰年 能被4
  • 联盟链FISCO BCOS网络端口讲解

    FISCO BCOS是完全开源的联盟区块链底层技术平台 由金融区块链合作联盟 深圳 简称金链盟 成立开源工作组通力打造 开源工作组成员包括博彦科技 华为 深证通 神州数码 四方精创 腾讯 微众银行 亦笔科技和越秀金科等金链盟成员机构 代码仓
  • IDEA 查看源码快捷键

    一 快捷键 快捷键 功能 Ctrl Shift i 出现类似于预览的小窗口 Ctrl Enter 接上步 完全打开源码 Ctrl 鼠标左键 一步到位打开源码 Ctrl Shift i gt Ctrl Enter IDEA 2018版 实用快
  • 使用Canal实现mysql binlog增量订阅数据

    前言 是由公司业务改造搜索功能 使用ES搜索引擎中间件 那么我们需要将mysql中的数据同步至ES服务中 最总选择使用alibaba的canal增量订阅和解析工具 简单原理 canal模拟mysql slave的交互协议 伪装自己为mysq
  • 使用Java操作excel的几种方法

    在平时的业务系统开发中 少不了需要用到导出 导入excel功能 今天我们就一起来总结一下 下面给大家介绍一下几种常用方法 apache poi easypoi easyexcel 文章目录 一 Apache poi 1 1 首先添加依赖 1
  • 动态IP代理是什么?一文看懂动态代理IP

    一 什么是动态IP代理 动态IP代理是一种代理服务 而动态IP是由ISP动态分配给用户的IP地址 这些IP地址会周期性地更改 每次链接互联网时 用户会被分配一个新的IP地址 因而也称为 轮换IP IP地址轮换是一个过程 您的IP 地址 网络
  • 【深入浅出深度学习】1、深度学习的发展

    人工智能 机器学习 深度学习的关系 1 人工智能 机器推理 利用计算机构建具有人类智力特征的复杂机器 即为通用人工智能或强人工智能 即让机器拥有人类的所有感觉 所有理智 像人类一样思考 要实现真正意义上的人工智能可能还有很长的路 但是在一些
  • Linux 进程异常退出 如何查看日志

    当进程异常退出时 可以通过以下步骤来查看日志 找到进程的 PID 进程 ID 可以通过 ps 命令来查看 ps aux grep lt 进程名称 gt 找到进程的日志文件 一般情况下 进程的日志文件都会被记录在 var log 目录下 可以
  • 将Echart的canvas动画导出为.gif进行下载,有Demo

    JS前端下载导出Echart的动画为 gif图 实现方式为 html2canvas js gif js gif worker js 下载html2canvas js引入项目中 官网 html2canvas js 官网 2 下载gif js引
  • C++重载前置和后置++运算符

    重载前置和后置 运算符 大家在学习运算符号的时候应该是注意到了 的两种用法 一种是前置的 一种是后置的 二者的主要的区别就是一个是先增加后取值 一个是先取值后自加 下面通过一个案例来解释一下重载 运算符号 来源 清华c C l o c k
  • MIT_6.828_lab2_exercise1_讲解

    这一部分任务就是完成5个函数 boot alloc mem init page init page alloc page free 做之前 要先分析一下内存分布和地址转换的内容 这些内容都是我做的时候边做边摸索的 遇到做不下去 就观察一下查
  • 线程池的讲解

    目录 1 传统线程缺点 2 线程池是什么 3 线程池的优点 4 线程池的使用 1 传统线程缺点 1 每次都需要创建和消耗线程 是需要消耗系统资源的 2 线程没有任务管理功能 当任务量比较大的时候没有任务队列对任务进行管理或者是拒绝任务 因此
  • C/C++中map和set嵌套使用

    边用边记录 所以不断更新中 目录 1 头文件 2 定义 3 迭代器 4 判断map中某个键值对是否存在 5 插入值 6 遍历map中嵌套的set 1 头文件 include
  • 线程间实现通信的几种方式

    目录 线程通信相关概述 提出问题 方式一 使用Object类的wait 和 notify 方法 方式二 Lock 接口中的 newContition 方法返回 Condition 对象 Condition 类也可以实现等待 通知模式 方法三
  • Wilcoxon符号秩+秩和检验学习[转载]

    参数检验就是已知数据的精确分布模型 根据数据来求出模型中的未知参数 而非参数检验就是无需对样本总体分布 比如满足正态分布 做出假设 1 符号检验 转自 https baike baidu com item E9 9D 9E E5 8F 82
  • excel文件拷贝

    package cn sos until import java io File import java io FileInputStream import java io FileOutputStream import java io I