从Excel复制/粘贴到网页
有没有一个标准的方式或库从spreasheet复制和粘贴到Web表单? 当我从Excel中select多个单元格时(显然)会丢失分隔符,并将所有单元格粘贴到Web表单的一个单元格中。 是否必须在VB中完成? 或者一旦粘贴操作在网页表单上启动,就可以完成处理?
您不会丢失分隔符,单元格由制表符( \t
)分隔,而行由换行符( \n
)分隔,而表格中可能不可见。 亲自尝试一下:将Excel中的内容复制到记事本中,就可以很好地看到你的单元格。 然后很容易通过选项卡拆分字段并用其他名称replace它们,这样您就可以从中构build一个表格。 这里是一个使用jQuery的例子:
var data = $('input[name=excel_data]').val(); var rows = data.split("\n"); var table = $('<table />'); for(var y in rows) { var cells = rows[y].split("\t"); var row = $('<tr />'); for(var x in cells) { row.append('<td>'+cells[x]+'</td>'); } table.append(row); } // Insert into DOM $('#excel_table').html(table);
所以本质上,这个脚本从粘贴的Excel数据创build一个HTML表格。
为了回应Tatu的回答,我创build了一个快速的jsFiddle来展示他的解决scheme:
http://jsfiddle.net/duwood/sTX7y/
HTML
<p>Paste excel data here:</p> <textarea name="excel_data" style="width:250px;height:150px;"></textarea><br> <input type="button" onclick="javascript:generateTable()" value="Genereate Table"/> <br><br> <p>Table data will appear below</p> <hr> <div id="excel_table"></div>
JS
function generateTable() { var data = $('textarea[name=excel_data]').val(); console.log(data); var rows = data.split("\n"); var table = $('<table />'); for(var y in rows) { var cells = rows[y].split("\t"); var row = $('<tr />'); for(var x in cells) { row.append('<td>'+cells[x]+'</td>'); } table.append(row); } // Insert into DOM $('#excel_table').html(table); }
与Tatu一样的想法(感谢我们很快就需要在我们的项目中),但有一个正则expression式。
大数据集可能会更快。
<html> <head> <title>excelToTable</title> <script src="../libs/jquery.js" type="text/javascript" charset="utf-8"></script> </head> <body> <textarea>a1 a2 a3 b1 b2 b3</textarea> <div></div> <input type="button" onclick="convert()" value="convert"/> <script> function convert(){ var xl = $('textarea').val(); $('div').html( '<table><tr><td>' + xl.replace(/\n+$/i, '').replace(/\n/g, '</tr><tr><td>').replace(/\t/g, '</td><td>') + '</tr></table>' ) } </script> </body> </html>
对于像我这样结局的未来谷歌来说,我使用@tatu Ulmanen的概念,并将其转化为一个对象数组。 这个简单的函数需要一串粘贴的Excel(或Google表格)数据(最好来自textarea
)并将其转换为一个对象数组。 它使用列/属性名称的第一行。
function excelToObjects(stringData){ var objects = []; //split into rows var rows = stringData.split('\n'); //Make columns columns = rows[0].split('\t'); //Note how we start at rowNr = 1, because 0 is the column row for (var rowNr = 1; rowNr < rows.length; rowNr++) { var o = {}; var data = rows[rowNr].split('\t'); //Loop through all the data for (var cellNr = 0; cellNr < data.length; cellNr++) { o[columns[cellNr]] = data[cellNr]; } objects.push(o); } return objects; }
希望它可以帮助未来的人。
在OSX和Windows上 ,针对不同types的内容有多种types的剪贴板。 在Excel中复制内容时,数据存储在明文和html剪贴板中。
正确的方式(不会被分隔符问题绊住)是parsingHTML。 http://jsbin.com/uwuvan/5是一个简单的演示,展示了如何获取HTML剪贴板。; 关键是绑定到onpaste事件并阅读
event.clipboardData.getData('text/html')
也许这样会更好,如果你要从PHP读取你的Excel文件,然后将其保存到数据库或做一些处理。
这里有一个关于如何用PHP读写Excel数据的入门教程:
http://www.ibm.com/developerworks/opensource/library/os-phpexcel/index.html
Excel 2007有一个function,在“数据”选项卡下可以很好地工作。
挖掘这个,以防将来遇到任何人。 我按照预期使用了上面的代码,但是在提交到数据库之后遇到了显示表的问题。 一旦您存储了数据以使用PHP来replace查询中的新行和制表符,就会更容易。 您可以在提交时执行replace,$ _POST [request]将是您的textarea的名称:
$postrequest = trim($_POST[request]); $dirty = array("\n", "\t"); $clean = array('</tr><tr><td>', '</td><td>'); $request = str_replace($dirty, $clean, $postrequest);
现在只需要将$ request插入到数据库中,并将其存储为HTML表格。