将Excel数据粘贴到html表中

时间:2009-07-07 22:07:49

标签: javascript html-table spreadsheet

使用Javascript,我如何创建一个HTML表格,可以通过电子表格中的“复制”从excel(或谷歌电子表格)“接受”数字矩阵数据,然后“粘贴”到浏览器中的表格中。

4 个答案:

答案 0 :(得分:18)

这只能在IE上可靠地工作,因为Firefox(可能还有其他人)不允许访问剪贴板而没有特别允许它;早先粘贴到textarea的建议可能比这更好。

从电子表格复制时,通常使用制表符(chr9)和带有CR(chr13)的行分隔单元格。此脚本将剪贴板转换为2D数组,然后从中构建表。不太优雅,但似乎可以将数据复制出Excel。

<html>
<head>
<script language="javascript">
function clip() {

    // get the clipboard text

    var clipText = window.clipboardData.getData('Text');

    // split into rows

    clipRows = clipText.split(String.fromCharCode(13));

    // split rows into columns

    for (i=0; i<clipRows.length; i++) {
        clipRows[i] = clipRows[i].split(String.fromCharCode(9));
    }


    // write out in a table

    newTable = document.createElement("table")
    newTable.border = 1;
    for (i=0; i<clipRows.length - 1; i++) {

        newRow = newTable.insertRow();

        for (j=0; j<clipRows[i].length; j++) {
            newCell = newRow.insertCell();
            if (clipRows[i][j].length == 0) {
                newCell.innerText = ' ';
            }
            else {
                newCell.innerText = clipRows[i][j];
            }
        }
    }

    document.body.appendChild(newTable);
}
</script>
</head>
<body>
<input type="button" onclick="clip()">
</body>
</html>

答案 1 :(得分:5)

这是我创建的javascript代码(基于有用的答案)。我是javascript的新手,所以我确信有更好的方法可以做到这一点,但它似乎有效......目标是从电子表格中将两列数字数据“粘贴”到文本区域(I已经尝试了excel和谷歌电子表格)并创建浮点向量“xf”和“yf”。希望对某人有用。批评欢迎......

它假设这些存在于html页面上......

<textarea id="psmtext" rows=24 cols=72> </textarea>

<input type="button" value="run code" onClick="psmtest();">

<小时/>

function psmtest(){

var psmtext = document.getElementById("psmtext"); var st = psmtext.value; Ast = st.split("\n"); var numrows = Ast.length;

var ii; var xs = []; var ys = []; for (ii = 0 ; ii < numrows ; ii++) { // tab or comma deliminated data if ( Ast[ii].split(",",2)[1] != null ){ ys[ii] = Ast[ii].split(",")[1]; xs[ii] = Ast[ii].split(",")[0];} if ( Ast[ii].split("\t",2)[1] != null ){ ys[ii] = Ast[ii].split("\t")[1]; xs[ii] = Ast[ii].split("\t")[0];} }

var xss = []; var yss = []; var numgoodrows = 0; var iii =0; for (ii = 0 ; ii < numrows ; ii++) { if ( xs[ii] != null && ys[ii] != null) { xss[iii] = xs[ii]; yss[iii] = ys[ii]; iii++; } } numgoodrows = iii; // next I need to convert to floating point array var xf = [], var yf = [];

var xf = []; var yf = []; for (ii = 0 ; ii < numgoodrows ; ii++) { xf[ii] = parseFloat(xss[ii]); yf[ii] = parseFloat(yss[ii]); }

}

答案 2 :(得分:1)

这很难做得很好。

我认为最好的方法是给用户一个可以粘贴的<textarea>。然后,在onchange事件处理程序中,使用一些JS解析来确定行和列的排列方式,创建HTML表并将其注入DOM。

这对于相对“正方形”的数据集应该可以正常工作 - 您可能会遇到更多合并列/行和“锯齿状”数据的问题

答案 3 :(得分:0)

虽然这个问题已经被认为已经得到了解答(并且是一个老问题),但我想指出现在有更好的解决方案,请参阅jQuery Spreadsheet/Grid plugin with copy/paste from/to Excel。我特别喜欢the HandsOnTable was suggested by warpech(也是这个jQuery插件的创建者)的极简主义。该插件仍然保持良好状态。