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

Javascript
XmlUtils JS操作XML工具类
jQuery animate效果演示
Jquery 设置标题的自动翻转
JQuery与Ajax常用代码实现对比
学习JS面向对象成果 借国庆发布个最新作品与大家交流
CSS 布局一个漂亮的滑块
兼容多浏览器的JS 浮动广告[推荐]
学习ExtJS(一) 之基础前提
学习ExtJS Column布局
jquery 最简单的属性菜单
有效的捕获JavaScript焦点的方法小结
js css样式操作代码(批量操作)
JS模拟的QQ面板上的多级可展开的菜单
jquery 框架使用教程 AJAX篇
css 有弹动效果的网页导航
jQuery语法总结和注意事项
用AJAX技术做Google Suggest效果
Javascript文档对象模型(DOM)实例分析
Javascript制作拖动网页布局的方法
Javascript解决IE6和FF的PNG图片兼容性问题

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 382 ::
收藏到网摘: 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就只能得到行号列宽等一些简单的属性。不知道谁有方法能得到比较全的信息。