背景:
在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