通过Excel.Application把html table 导入到excel中求助

小昭归来 发布于 2013/12/13 15:52
阅读 1K+
收藏 0

通过js把html里的table导入到excel表中,网上搜到了一个方法

    exports.base64 = function base64(string){    
        return window.btoa(unescape(encodeURIComponent(string)));
    };
    
    exports.tableToExcel = function tableToExcel(tableList, name){
        
        var tables = [],
          uri = 'data:application/vnd.ms-excel;base64,',
          template1 = '<html xmlns:o="urn:schemas-microsoft-com🏢office" xmlns:x="urn:schemas-microsoft-com🏢excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name><$=worksheet $></x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><$ for (var i = 0; i < tables.length; i++) {$><table><$==tables[i] $></table><$ } $></body></html>';
        
          for (var i = 0; i < tableList.length; i++) {
            tables.push(tableList[i].innerHTML);
          }
          var data = {
            worksheet: name || 'Worksheet',
            tables: tables
          };
          
          var render = template.compile(template1);
          var html = render(data);          
          window.location.href = uri + exports.base64(html);
    };

这种可是现实火狐chrome和搜狗浏览器的下载,但是对于ie却不行,其实上面的方法我不明白啥原理,主要是最后一句window.location.href = uri + exports.base64(html);,其实不明白为啥对ie不适用?

另外,我网上搜的专门针对ie浏览器用Excel.Application控件的方式,有好多方法主要是整体导入和一个个cell填充,后者的缺点太明显了就是对于跨行的解决起来比较苦难,但是前者一直不行(搜到的帖子都是09年左右的老帖不知道是不是技术过时了还是咋的),所以求助下大家怎么解决呢?

         var tables = $('.table');
         var table = "";
          tables.each(function () {
              table = table + "<table>" + $(this).html() + "</table>";
          });
         // alert(table);
           var oXL;
           try{
                    oXL = new ActiveXObject("Excel.Application"); //创建AX对象excel
           }catch(e){
                    alert("无法启动Excel!\n\n如果您确信您的电脑中已经安装了Excel,"+"那么请调整IE的安全级别。\n\n具体操作:\n\n"+"工具 → Internet选项 → 安全 → 自定义级别 → 对没有标记为安全的ActiveX进行初始化和脚本运行 → 启用");
                    return false;
           }
           var oWB = oXL.Workbooks.Add(); //获取workbook对象
           var oSheet = oWB.ActiveSheet;//激活当前sheet
           var sel = document.body.createTextRange();
           sel.moveToElementText(table); //把表格中的内容移到TextRange中
           sel.select(); //全选TextRange中内容
           sel.execCommand("Copy");//复制TextRange中内容
           oSheet.Paste();//粘贴到活动的EXCEL中
           oXL.Visible = true; //设置excel可见属性
           var fname = oXL.Application.GetSaveAsFilename("将table导出到excel.xls", "Excel Spreadsheets (*.xls), *.xls");
           oWB.SaveAs(fname);
           oWB.Close();
           oXL.Quit();

加载中
返回顶部
顶部