如何拆分剪贴板中复制的Excel数据到数组,并赋值到下方的table中?

weidegong 2007-03-21 03:57:48
<script>
function Paste(){
var ClipboardText=window.clipboardData.getData('Text');
var ClipboardText=ClipboardText.replace(/[\r\n]/g, ",");
var Rows=ClipboardText.split(",");
for(var iRow=0;iRow<Rows.length;iRow++) {
var Cells=Rows[iRow].split('\t');
for(var iCol=0;iCol<Cells.length;iCol++)
alert(Cells[iCol]);
}
}
</script>

<input id="Test"></input><input type="button" value="Paste" onclick="Paste();"></input>
<table>
<tr><td><input></input><input></input></td></tr>
<tr><td><input></input><input></input></td></tr>
</table>
...全文
801 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
RexZheng 2007-03-22
  • 打赏
  • 举报
回复
<html>
<head>
<title></title>
<script language="JavaScript">
function Paste()
{
var tab = window.document.getElementById("TableExcel");
alert(window.clipboardData.getData('Text'));
var exRows = window.clipboardData.getData('Text').split("\r");
for(var i = 0; i < exRows.length; i++)
{
if(i == tab.rows.length)
{
break;
}
alert(i)
var row = tab.rows[i];
var exCells = exRows[i].split("\t");
for(var j = 0; j < exCells.length; j++)
{
if(j == row.cells.length)
{
continue;
}
row.cells[j].childNodes[0].value = exCells[j];
}
}
}

</script>
</head>
<body>
<input id="paset" type="button" value="Paste" onclick="Paste();"></input>
<table id="TableExcel">
<tr><td><input></input></td><td><input></input></td></tr>
<tr><td><input></input></td><td><input></input></td></tr>
</table>
</body>
</html>


IE6.0中测试通过
RexZheng 2007-03-22
  • 打赏
  • 举报
回复
拆分数据有什么困难的?

行之间是用\r\n分割
单元格之间用\t分割


var rows = window.clipboardData.getData('Text').split("\r\n");
for(var i = 0; i < rows.length; i++)
{
cells = rows[i].split("\t");
for(var j = 0; j < cells.length; j++)
{
alert("[Row:" + (i + 1) + ", Column:" + (j + 1) + "]\tValue: " + cells[j])
}
}


eyan_810810 2007-03-22
  • 打赏
  • 举报
回复
weidegong 2007-03-22
  • 打赏
  • 举报
回复
终于有个回复了,关于元素的定位和赋值我用jQuery把这个问题解决了
$('#TableExcel tr:eq(行数) td:eq(列数) input:eq(0)').val(赋值);

现在就是拆分数据成数组有点麻烦,在Excel里复制一个两行两列的数据,然后点击按钮“Paste”

在Firefox2中运行正确的,在IE6中仅粘贴了一行

----
ps:把引用jQuery的一行代码改为:
<script src="http://jquery.com/src/jquery-latest.pack.js" type="text/javascript"></script>

RexZheng 2007-03-22
  • 打赏
  • 举报
回复
取table的cell可以用这样的方式
window.document.getElementsByTagName("table")[0].rows[iRow].cells[iCol].innerText

取cell里面的input可以用
window.document.getElementsByTagName("table")[0].rows[iRow].cells[iCol].childNodes[0].value
weidegong 2007-03-22
  • 打赏
  • 举报
回复
OK,终于发现兼容问题所在了:
getClipboard().split("\r");//此时在IE6中有效,在Firefox2中则不能被准备拆分,只有一行

getClipboard().split("\n");//测试发现无论IE6、firefox2都能够被准确拆分

问题基本解决。

似乎复制的数据在IE和Firefox中并不一致:
在Firebug中测试发现Firefox复制的数据是这样的"11 12\n21 22\n"
IE中的数据应该是:"11 12\r\n21 22\r\n"
ford20082000 2007-03-22
  • 打赏
  • 举报
回复
<html>
<head>
<title></title>
<script language="JavaScript">
function Paste(){
var tab = window.document.getElementById("TableExcel");
while(tab.rows.length > 0){
tab.deleteRow(0);
}
var exRows = window.clipboardData.getData('Text').split("\r");
for(var i = 0; i < exRows.length; i++){
var trTmp = tab.insertRow(i);
var exCells = exRows[i].split("\t");
for(var j = 0; j < exCells.length; j++){
var tdTmp = trTmp.insertCell(j);
tdTmp.innerHTML = '<td align="center">' + exCells[j] + '</td>'
}
}
}

</script>
</head>
<body>
<input id="paset" type="button" value="Paste" onclick="Paste();"></input>
<table id="TableExcel" border="0" bgcolor='#E4E4E4' cellspacing="3" cellpadding="3" align="center"></table>
</body>
</html>

IE6.0中测试通过
方法比0009(夏天以南)的优化一点,表格的单元格是动态的。
weidegong 2007-03-21
  • 打赏
  • 举报
回复
用jQuery稍微整理了一个,Firefox2下工作正常,IE6不太对

--------------------------------
<script src="jquery.js" type="text/javascript"></script>
<script>
function Paste(){
var ClipboardText=getClipboard();
var ClipboardText=ClipboardText.replace(/[\r\n]/g, ",");
var Rows=ClipboardText.split(",");
for(var iRow=0;iRow<Rows.length;iRow++) {
var Cells=Rows[iRow].split('\t');
for(var iCol=0;iCol<Cells.length;iCol++)
$('#TableExcel tr:eq('+iRow+') td:eq('+iCol+ ') input:eq(0)').val(Cells[iCol]);
}
}


/**************************************************
http://www.codebase.nl/index.php/command/viewcode/id/174
**************************************************/
function getClipboard() {
if (window.clipboardData) {
return(window.clipboardData.getData('Text'));
}
else if (window.netscape) {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
if (!clip) return;
var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
if (!trans) return;
trans.addDataFlavor('text/unicode');
clip.getData(trans,clip.kGlobalClipboard);
var str = new Object();
var len = new Object();
try {
trans.getTransferData('text/unicode',str,len);
}
catch(error) {
return null;
}
if (str) {
if (Components.interfaces.nsISupportsWString) str=str.value.QueryInterface(Components.interfaces.nsISupportsWString);
else if (Components.interfaces.nsISupportsString) str=str.value.QueryInterface(Components.interfaces.nsISupportsString);
else str = null;
}
if (str) {
return(str.data.substring(0,len.value / 2));
}
}
return null;
}
</script>
<input id="paset" type="button" value="Paste" onclick="Paste();"></input>
<table id="TableExcel">
<tr><td><input></input></td><td><input></input></td></tr>
<tr><td><input></input></td><td><input></input></td></tr>
</table>

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧