从Excel中复制数据

背景:

在Excel中执行Ctrl+V和Ctrl+C,Excel都会去OS粘贴板中获取和设置数据,具体它设置的是什么格式的没有研究过,但是如果按照字符串方式读取这些数据,那么想要把每个单元格的数据区分开,其实很简单。

Excel向OS粘贴板设置的数据,因为技术原因,只能以Text方式读取,那么同一行的每个单元格值之间是有一个制表位的(\t),每行数据之间是有一个回车符(\n),所以我们只需要按照\n分割字符串,然后在每个字符串中再按照\t分割,就可以得到每个cell的值了。向Excel中复制数据:思路很简单,把每个cell之间用\t隔开,每行之间用\n隔开。

基于JS的实现代码,基于Java的应该可以读取到更多信息,Java需要通过Swing来和clipboard交互,或者用其他程序读取了clipboard发给Java服务器(或处理程序)处理:

<!DOCTYPE html>
<html>

	<head>
		<meta charset="utf-8" />
		<script src="jquery.js"></script>
		<title>Copy Test</title>
		<script>
			$(document).ready(function() {
				function pastHandler(e) {
					var cp = e.clipboardData;
					alert(cp);
					window.console.debug(e);
				}
				$(document.body).bind({
					copy: function(e) {
						var cpTxt = "Id\t名称\t年龄\t\n2100102\tSaillen\t20\t\n";
						var clipboardData = window.clipboardData; //for IE
						if (!clipboardData) { // for chrome
							clipboardData = e.originalEvent.clipboardData;
						}
						//e.clipboardData.getData('text/plain');
						clipboardData.setData('Text', cpTxt);
						//alert(cpTxt);
						$('#message').text('Copy Data : ' + cpTxt);
						return false;
					},
					paste: function(e) {
						var eve = e.originalEvent
						var cp = eve.clipboardData;
						var data = null;
						var clipboardData = window.clipboardData; // IE
						if (!clipboardData) { //chrome
							clipboardData = e.originalEvent.clipboardData
						}
						//解析
						data = clipboardData.getData('Text');
						var datas = data.split("\n");
						var html = "<table border='1px' cellspacing='0' style='border-collapse: collapse;' >";
						for (var i = 0; i < datas.length; i++) {
							var row = datas[i].split("\t");
							html += "<tr>";
							for (var j = 0; j < row.length; j++) {
								html += "<td>" + row[j] + "</td>";
							}
							html += "</tr>";
						}
						html += "</table>";
						$('#message').html(html);
					},
					cut: function(e) {
						return false;
					}
				});
			});
		</script>
	</head>

	<body>
		<div id="ctx" style="margin: 0 auto;width: 600px;">
			<h1 style="text-align: center;">Copy/Paste Demo</h1>
			<h3>选中复制下面的表</h3>
			<table border="1px" cellspacing="0" style="border-collapse: collapse;">
				<tr>
					<td>Id</td>
					<td>名称</td>
					<td>年龄</td>
				</tr>
				<tr>
					<td>2100102</td>
					<td>Saillen</td>
					<td>20</td>
				</tr>
			</table>
			<hr />
			<input />
			<h3>从外部复制的数据:</h3>
			<div id="message"></div>
		</div>
	</body>

</html>

注意:

Excel复制出来的数据,最后会有一个\n,这回无形中多处一行数据。每行的单元格数据最后有一个\t,会让每行无形中多处一列。

时间: 2024-11-16 05:53:22

从Excel中复制数据的相关文章

C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二)

本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (一) 上个帖子主要是讲了如何读取Excel,本帖主要是讲述读取的Excel数据是如何序列化成二进制的,考虑到现在在手游中应用很广泛的序列化技术Google的ProtoBuf,所以本文也是按照ProtoBuf的方式来操作的.ProtoBuf是一个开源库,简单来说ProtoBuf就是一个能使序列化的数据变得更小的类库,当然这里指的更小是相对的.好了ProtBuf的东西就不在多说,以后会专门写一篇帖子的.本帖其实就相当于上

如何把Excel中的数据导入到数据库

NPOI: using NPOI.HSSF.UserModel; using NPOI.SS.Formula.Eval; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Data; using System.IO; namespace ZZAS.HNYZ.GPSInstallManage.Common { public class ExcelHelper : IDisposable {

Java利用POI导入导出Excel中的数据

     首先谈一下今天发生的一件开心的事,本着一颗android的心我被分配到了PB组,身在曹营心在汉啊!好吧,今天要记录和分享的是Java利用POI导入导出Excel中的数据.下面POI包的下载地址http://poi.apache.org/download.html,有兴趣的朋友也可以去看看其中的API.      下面分享一下在对POI进行基本操作时觉得需要注意的两点:       1.POI中针对xlsx/xls是需要create different Workbook instance

C# Unity游戏开发——Excel中的数据是如何到游戏中的 (三)

本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二) 前几天有点事情所以没有继续更新,今天我们接着说.上个帖子中我们看到已经把Excel数据生成了.bin的文件,不过其实这样到游戏中还是不能用的.主要有两个方面,1.bin文件的后缀使我们随便取的名字,但是这种文件Unity不买账.因为Unity中的二进制文件必须是以.bytes命名的.2.在写文件之前其实还可以对二进制进行压缩,这样可以最大化节省设备空间.也就是说我们在生成数据实例后还需要做以下几件事:序列化 -

用黏贴板读取excel中的数据以及用R生成人名

本人尚在超级菜鸟级别,中间有些代码写的很low,请不要见笑! 1.今天先跟大家分享一个小技巧,用黏贴板将excel中的数据读进R 首先选中要读入R的数据 如图,上面是我分析的病人相关资料,Ctrol+C选中目标区域,接着在R运行以下代码: excel_clinic_data <- read.table("clipboard",sep="\t",header = T) 运行后就可以看到我们想要读到R中的数据已经读进来了,超级方便. 注意:经本人试验,好像不支持不

使用OpenXml把Excel中的数据导出到DataSet中

public class OpenXmlHelper { /// <summary> /// 读取Excel数据到DataSet中,默认读取所有Sheet中的数据 /// </summary> /// <param name="filePath">Excel文件路径</param> /// <param name="sheetNames">Sheet名称列表,默认为null查询所有Sheet中的数据<

Excel中的数据导入到SqlServer数据库中

从SqlServer2008才开始支持导出表结构的和表中的数据,而SqlServer2008以前的数据库只支持导出表结构,有些时候我们可能需要把2008以前的数据库中的数据导出来,这个时候我们可以使用折中的方法,先把数据库导出到Excel中,再把Excel中的数据导入到数据库中(如果两台数据库服务器之间可以互通的话,可以直接建立远程链接进行数据传输,不用如此麻烦), 将SqlServer中的数据导出到Excel中比较简单,这里不再贴图,下面是把Excel中的数据导入到SqlServer中步骤:

中文 数据库 乱码 excel中导入数据到mysql 问题

数据库编码  表编码  ide编码 必须一致,即可解决问题 场景:把这些数据导入数据库,并且得到城市名称拼音的首字母 从excel中导入数据到mysql,使用了jxl这个库 使用了pinyin4这个库,但是发现有bug import java.io.UnsupportedEncodingException; import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import ja

对比俩个Excel中的数据,并且进行数据操作

项目需要, 去对比俩个Excel中的数据是否一样, 不一样需要做替换, 有个同事在处理中(处理了一天 1000 多条吧,移交给我), 本人在想通过人工手动的方式,一个个做对比得花多长时间啊, 主要是数据量还很大,最主要的是, 我也不想干,不干没办法. 思考之后: 方案一:准备把Excel1 数据读取到,放在一个很大的List中, 然后在读Excel2, 之后做对比和替换. 注:所在的公司根本不知道,封装公共类库,公共方法, 谁用谁写那种模式. 方案二:把俩个excel中的数据全部导入到数据库中,