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文件拷贝 的相关文章

随机推荐

  • 一个测试的成长历程【功能测试篇】——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