2017-12-08 17 views
0

私は、すべてのブラウザでcomatibaleというjavaスクリプトまたはjqueryを使用して、htmlテーブルのデータをExcelに書き出したいと考えています。私は、このスクリプトは、Mozilla Firefoxで正常に動作します、しかし、私はChromeブラウザで同じスクリプトをテストしたときには、.Iは私がミスをしないネットワークエラー を取得しています動作していないレコードのロットの Excelのエクスポートでは、多くのレコードでGoogle Chromeが動作しない

スクリプト以下
 tableToExcel: function (table, name, sheetName) { 
     var e = this, fullTemplate = "", i, link, a; 

     e.uri = "data:application/vnd.ms-excel;base64,"; 
     e.base64 = function (s) { 
      return window.btoa(unescape(encodeURIComponent(s))); 
     }; 
     e.format = function (s, c) { 
      return s.replace(/{(\w+)}/g, function (m, p) { 
       return c[p]; 
      }); 
     }; 

     sheetName = typeof sheetName === "undefined" ? "Sheet" : sheetName; 

     e.ctx = { 
      worksheet: name || "Worksheet", 
      table: table, 
      sheetName: sheetName, 
     }; 

     fullTemplate = e.template.head; 

     if ($.isArray(table)) { 
      for (i in table) { 
       fullTemplate += e.template.sheet.head + sheetName + i + e.template.sheet.tail; 
      } 
     } 

     fullTemplate += e.template.mid; 

     if ($.isArray(table)) { 
      for (i in table) { 
       fullTemplate += e.template.table.head + "{table" + i + "}" + e.template.table.tail; 
      } 
     } 

     fullTemplate += e.template.foot; 

     for (i in table) { 
      e.ctx["table" + i] = table[i]; 
     } 
     delete e.ctx.table; 

     if (typeof msie !== "undefined" && msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))  // If Internet Explorer 
     { 
      if (typeof Blob !== "undefined") { 
       //use blobs if we can 
       fullTemplate = [fullTemplate]; 
       //convert to array 
       var blob1 = new Blob(fullTemplate, { type: "text/html" }); 
       window.navigator.msSaveBlob(blob1, getFileName(e.settings)); 
      } else { 
       //otherwise use the iframe and save 
       //requires a blank iframe on page called txtArea1 
       txtArea1.document.open("text/html", "replace"); 
       txtArea1.document.write(e.format(fullTemplate, e.ctx)); 
       txtArea1.document.close(); 
       txtArea1.focus(); 
       sa = txtArea1.document.execCommand("SaveAs", true, getFileName(e.settings)); 
      } 

     } else { 
      link = e.uri + e.base64(e.format(fullTemplate, e.ctx)); 
      a = document.createElement("a"); 
      a.download = getFileName(e.settings); 
      a.href = link; 

      document.body.appendChild(a); 

      a.click(); 

      document.body.removeChild(a); 
     } 

     return true; 
    } 

を使用しています。私たちを手伝ってくれますか?

答えて

0

excelエクスポート中に、レコードが多すぎる場合、クラッシュの原因がクロムのURLの制限を超えています。これはクロムのバグです。

次のコードでは、データはblob URLに変換されてエクスポートされます。私の問題は解決しました。これが他の人にも役立つことを願っています。

function b64toBlob(b64Data, contentType, sliceSize) { 
      contentType = contentType || ''; 
      sliceSize = sliceSize || 512; 

      var byteCharacters = atob(b64Data); 
      var byteArrays = []; 

      for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) { 
       var slice = byteCharacters.slice(offset, offset + sliceSize); 

       var byteNumbers = new Array(slice.length); 
       for (var i = 0; i < slice.length; i++) { 
        byteNumbers[i] = slice.charCodeAt(i); 
       } 

       var byteArray = new Uint8Array(byteNumbers); 

       byteArrays.push(byteArray); 
      } 

      var blob = new Blob(byteArrays, { type: contentType }); 
      return blob; 
    } 

ここでは、次のような機能を使用できます。

var blob = b64toBlob(e.base64(e.format(fullTemplate, e.ctx)), "application/vnd.ms-excel"); 
var blobUrl = URL.createObjectURL(blob); 
a = document.createElement("a"); 
a.download = getFileName(e.settings); 
a.href = blobUrl; 
document.body.appendChild(a); 
a.click(); 
document.body.removeChild(a); 
関連する問題