2016-11-29 1 views
1

約1000 - 5000レコード(14列)のレポートを生成するWebページがあります。コード:javascript excellentexportブロブの問題

excel: function(anchor, table, name) { 
     table = get(table); 
     var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}; 
     var hrefvalue = uri.excel + base64(format(template.excel, ctx)); 
     anchor.href = hrefvalue; 
     // Return true to allow the link to work 
     return true; 
    }, 

このレコードは、レコードが約1500ですが、2000を超える場合は正しく表示されません。私はこの記事how to export table as excel with 10000 to 40000 rowsを見て、自分のコードから、それを組み込むことを試みた:

var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}; 

var blob = b64toBlob(ctx, "application/vnd.ms-excel"); 
var blobUrl = URL.createObjectURL(blob); 
window.location = blobUrl; 

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; 
} 

私は今2000件の以上のレコードを持つレコードをエクスポートすることができますが、私はスプレッドシートを開いたとき、それはまた、メニューをエクスポート、レポートボタン、にテキストボックス私が必要とするレポートの開始は、輸出されたすべての余分なもので行150のどこかにあります。

excelでもエクスポートされているUIを削除する方法はありますか?

答えて

1

私は暗闇の中で撮影を取るつもりだ - 本当にあなたのコードがどのように機能するかについて多くを知らない... get(), format(), template.excelは、私たちはあなたを助けるすることが難しくなっていますことを、多くに知られていない...

しかし、ここで私はあなたがしなければならないと思うものです:

excel: function(anchor, table, name) { 
    table = get(table); 
    var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}; 
    var data = format(template.excel, ctx) 
    var blob = new Blob([data], {type: "application/vnd.ms-excel"}) 
    var url = URL.createObjectURL(blob) 
    anchor.href = url; 
    anchor.download = 'file.xlsx' 
    // Return true to allow the link to work 
    return true; 
} 

ところで完全にbase64でネジしよう - それは悪い習慣だ

私はお勧めもう一つは、FileSaver.js

です