从Excel中复制数据

11 篇文章 0 订阅
11 篇文章 0 订阅

背景:

        在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,会让每行无形中多处一列。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值