[转]js操作剪切板内容Excel多单元格数据到Html table对应单元格的复制

黎豆子 2012-10-29

<script type="text/javascript">  
    
    //为每个text控件定义“获得输入焦点”和“失去焦点”时的样式   
    $("input[type='text']").focus(function(){   
             $(this).css({"background-color":"#FFFFE0"});    
        }).blur(function(){   
             $(this).css({"background-color":"white"});   
        });   
    //jquery中未对onpaste事件(即粘贴事件)进行封装,只好采用js原有的方式为每个text控件绑定onpaste事件   
    $.each($("input[type='text']"),function(obj,index){   
         this.onpaste = readClipboardData;   
      });   
  
    //获取剪切板数据 函数   
    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) strstr = str.value.QueryInterface(Components.interfaces.nsISupportsWString);   
                else if (Components.interfaces.nsISupportsString) strstr = str.value.QueryInterface(Components.interfaces.nsISupportsString);   
                else str = null;   
            }   
            if (str) {   
                return (str.data.substring(0, len.value / 2));   
            }   
        }   
        return null;   
    }   
       
    //读取剪切板数据,并将剪切板数据存放于各table cell中   
    function readClipboardData() {   
        var str = getClipboard(); //获取剪切板数据   
        var len = str.split("\n");//获取行数   
        var tdIndex = $(this).parent().index(); //获取当前text控件的父元素td的索引   
        var trIndex = $(this).parent().parent().index(); //获取当前text控件的父元素的父元素tr的索引   
        var trStr;   
  
   //从excle表格中复制的数据,最后一行为空行,因此无需对len数组中最后的元素进行处理   
  for(var i=0;i<len.length-1;i++){   
           //excel表格同一行的多个cell是以空格 分割的,此处以空格为单位对字符串做 拆分操作。。   
           trStr = len[i].split(/\s+/);    
            for(var j=0;j<=trStr.length-1;j++){ //将excel中的一行数据存放在table中的一行cell中   
                $("tr:eq("+trIndex+")").children("td:eq("+(tdIndex+j)+")").children().val(trStr[j]);   
            }   
            trIndex ++ ;   
        }   
      return false; //防止onpaste事件起泡   
    }   
       
  </script>  
</html>

相关推荐