最近研究WebFx的Grid(http://webfx.eae.net/dhtml/grid/intro.html)的用法。其中有一个需求:要求支持从Excel中多行多列地拷贝。一直觉得要让这种用js写的控件支持从Excel中多行多列拷贝是不大可能的。后来看google的在线电子表格(http://spreadsheet.google.com)支持从Excel中多行多列地拷贝,同事的想法启法了我。"居然google的就支持从Excel多行多列拷贝,它应该是操作剪贴板的内容,我们也可以操作剪贴板的内容,以excel对象的那种"。开始研究用
var txt =
clipboardData.getData(‘text’);获取剪贴板的内容,并用alert(txt)打印出txt的内容发现这些数据是有规律的:
每一行之间是用”n”来表示的, 同一行中相邻的单元格之间是用“
”这些空格来表示的。用下面这个双层循环即可依次求出每个单元格的内容。
function myfun(){ var txt = clipboardData.getData('text'); var
txtArr = txt.split("n"); for(var i = 0; i < txtArr.length;
i++){ var ptxArr = txtArr[i].split(" "); for(var j = 0; j <
ptxArr.length; j++){ alert(ptxArr[j]); } }
所以给WebFx-Grid的每个单元格加上一个右键菜单,如(﹤div
class="menuitems" url="#" οnclick="grid_paste()"﹥粘贴﹤/div﹥),grid_paste()方法如下:
//----- paste function ---------------------- var srcElement;
function grid_paste(){ // get current cell var e =
getElement(srcElement); // get the cell id var grid_cell_id = e.id;
paste(grid_cell_id); } //----- copy operate common -------------
function paste(grid_cell_id){ var txt =
clipboardData.getData('text'); if(txt == null) {return}; var
row_txtArr = txt.split("n"); var cell_txt = ""; // 1.get the total
row numbers (求出共有的行数) var rowsLen = oGrid.rows.length; //
2.get the total column numbers (求出共有的列数) var colsLen =
oGrid.rows[0].cells.length; var idPrefix = new
String("webfx-grid-object-"); var cell_num_id =
grid_cell_id.substring(idPrefix.length,grid_cell_id.length); var
len = row_txtArr.length; if(len > 1){len = len -1;} for(var i =
0; i < len; i++){ cell_txt = row_txtArr[i].split(" "); for(var j
= 0; j < cell_txt.length; j++){ var increment = i*(colsLen+1);
var countId = parseInt(cell_num_id) + parseInt(increment) +
parseInt(j); var id = idPrefix + countId; var cell_td =
document.getElementByIdx(id); var cell_span = cell_td.firstChild;
cell_span.innerText = cell_txt[j]; } } }
效果图如下: