当前位置: 首页 > 图文教程 > 网络编程 > Javascript > JS 巧妙获取剪贴板数据 Excel数据的粘贴

Javascript
IE中直接运行显示当前网页中的图片 推荐
广告显示判断
srcElement表格样式
免费空间广告万能消除代码
[原创]手机号码本地检测
JS实现浏览器菜单命令
JS代码混淆初步
经验几则 推荐
MSN消息提示类
正宗的日历(含农历)
农历与西历对照
在网页中屏蔽快捷键
简单获取键盘的KeyCode
音乐播放用的的几个函数
你的编程语言可以这样做吗?
如何遍历对象的属性?
自动关闭的层
prototype 的说明 js类
js脚本学习 比较实用的基础
日期函数扩展类Ver0.1.1

Javascript 中的 JS 巧妙获取剪贴板数据 Excel数据的粘贴


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 256 ::
收藏到网摘: n/a

最近需要在浏览器端实现excel数据的粘贴,一开始去找获取剪贴板数据的方法。但是在浏览器端,JS去取是受安全限制的。 另外的方法就是用flash了,它可以避开浏览器的安全限制,但是system类中只有set的方法,另外的clipboard类中倒是能访问到,但是似乎需要flash10的版本支持。
网上找了一圈,没啥发现。终于想到去看看google sheet是怎么干的。
发现google sheet实现了excel的纯文本的多数据格粘贴,没有安全限制的需要,没有使用flash。可能很多人都知道这种方法了,反正我一开始很惊讶的,但是无奈,google的js文件是处理过的,看起来太累了。然后又去找ZOHO sheet,它的js文件只简单处理了一下,能debug,能看。
原来,其在body上注册了onkeydown事件,当用户按下ctrl+v键的时候,js将焦点转移到一个textarea标签上,这样,接下来的keyPress和keyUp事件就发生在textarea上了,自然而然的就相当于用户在textarea中复制了一下,然后,js再将焦点转移,从textarea中将值取到。这样就取到了剪贴板内文本数据了。
下面是一个模仿ZOHO sheet实现的小例子。
复制代码 代码如下:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript"><!--
function cellkeydown(event) {
if (event.ctrlKey && event.keyCode == 86) {
var ss = document.getElementById("textArea");
ss.focus();
ss.select();
// 等50毫秒,keyPress事件发生了再去处理数据
setTimeout("dealwithData()",50);
}
}
function dealwithData(event) {
var ss = document.getElementById("textArea");
alert(ss.value);
ss.blur();
}
// --></script>
</head>
<body onkeydown="return cellkeydown(event)">
<div>
<textarea id="textArea">

获得的Excel的文本数据,按照\t,\n就可以分割得到格子和行信息了。但这样只能得到简单的纯文本的excel值,格子的样式都弄不到。但我发现一个方法,当向iframe的document中复制的时候(就是在线编辑器的实现方式),这样能出现一些样式信息,IE中特别全,估计是因为自己家的产品自己能解析的缘故,FF和Chrome就只能得到行号列宽等一些简单的属性。不知道谁有方法能得到比较全的信息。