2013-08-12 17 views
18

Tabloda görüntülenen Verileri CSV Biçimine Verme'ye ihtiyacım var. Çok fazla şey denedim ama IE 9 ve üstü için çalışamıyorum. Kodumla created a dummy fiddle1 varJavascript/jQuery: Verileri IE'de çalışmayan CSV'ye dışa aktarma

Stackoverflow'taki bağlantıların çoğunu gördüm, ancak IE9 veya üzeri ile çalışan hiçbir şey bulamadım. Gibi

@ Terry Young explains in how-to-data-export-to-csv-using-jquery-or-javascript Ayrıca

var csv = ConvertToCSV(_tempObj); 
     var fileName = csvExportFileName(); 
     if (navigator.appName != 'Microsoft Internet Explorer') { 
      window.open('data:text/csv;charset=utf-8,' + escape(str)); 
     } 
     else { 
      var popup = window.open('', 'csv', ''); 
      popup.document.body.innerHTML = '<pre>' + str + '</pre>'; 
     } 

bunu düzeltmek için ne kadar emin değilim

tried-. Sunucuya vurmak ve CSV'imi dışa aktarmak istemiyorum (gereklilik de öyle).

Yapabileceğiniz 10+ IE için
+0

@Shubh tüm bunlar seni çözmek vermedi - i am dış yüzey Aynı sorun - Bu geçici çözümü bir göz attım - http://blog.paxcel.net/blog/savedownload-file-using-html5-javascript-the-download-attribute-2/ ama benim için işe yaramadı – anna

+0

@anna Noplar. Bunu çözemedim. Sonunda istenen tarafı almak için Sunucu Tarafı mantığını kullanmalıydım. – Shubh

+0

tamam teşekkürler ne bir şey için bir kabus aramaya devam etmelisin! – anna

cevap

15

gidebilirsiniz. Ben bu konuda öğretici yazdım fazla bilgi için IE için

bunu kullanın,

var IEwindow = window.open(); 
IEwindow.document.write('sep=,\r\n' + CSV); 
IEwindow.document.close(); 
IEwindow.document.execCommand('SaveAs', true, fileName + ".csv"); 
IEwindow.close(); 

, bkz - Download JSON data in CSV format Cross Browser Support

Umut bu sizin için yararlı olacaktır.

+0

Teşekkürler, bu benim zaman kazandırır. –

+0

Gerçekten de CSV dosyasının kendisine eklenmeden bir ayırıcı belirtmek var mı? Bazı nedenlerden dolayı, Chrome'da CSV'ler oluşturduğumda (OP'dekine benzer bir yöntem kullanarak), Excel, CSV'yi "sep =", – JLewkovich

+0

modern tarayıcıları ve IE8'i desteklemek zorunda kalmadan açabilir. Bu kod biraz muazzam bana yardımcı oldu. Teşekkürler! –

6

:

var a = document.createElement('a'); 
     if(window.navigator.msSaveOrOpenBlob){ 
      var fileData = str; 
      blobObject = new Blob([str]); 
      a.onclick=function(){ 
       window.navigator.msSaveOrOpenBlob(blobObject, 'MyFile.csv'); 
      } 
     } 
     a.appendChild(document.createTextNode('Click to Download')); 
     document.body.appendChild(a); 

Ben IE önceki sürümlerinde mümkün olduğu inanmıyorum. Bu kabul edilebilir olmadığını ActiveX nesnesini yürüten olmadan, ama şunu kullanabilirsiniz: Kullanıcının dosya sistemine doğrudan dosyayı yazardı

var sfo=new ActiveXObject('scripting.FileSystemObject'); 
var fLoc=sfo.CreateTextFile('MyFile.csv'); 
fLoc.WriteLine(str); 
fLoc.close(); 

. Ancak bu, genellikle kullanıcının komut dosyasının çalışmasına izin vermek isteyip istemediğini sormasını ister. İstemci bir intranet ortamında devre dışı bırakılabilir.

4

Bunun için benim için IE 8+ destekleyen bir çözüm var. Aşağıda gösterildiği gibi ayırıcıyı belirtmemiz gerekiyor.

if (navigator.appName == "Microsoft Internet Explorer") {  
    var oWin = window.open(); 
    oWin.document.write('sep=,\r\n' + CSV); 
    oWin.document.close(); 
    oWin.document.execCommand('SaveAs', true, fileName + ".csv"); 
    oWin.close(); 
    } 

Javascript bu sorununuzu çözecektir kullandıktan sonra linke http://andrew-b.com/view/article/44

+0

Bağlantı bozuk – ameliapond

1

Bu jQuery gerekmeden, herhangi bir tarayıcı üzerinde çalışacaktır.

  1. sayfanızdaki herhangi bir yerinde şu iframe ekleyin:

    <iframe id="CsvExpFrame" style="display: none"></iframe>

  2. sayfasında tabloya bir kimliği verin vermek istediğiniz:

    <table id="dataTable">

  3. ExportToCsv işlevini çağırmak için varsayılan dosya adını ve kimliğini iletmek üzere bağlantınızı veya düğmenizi özelleştirin Tablo parametreleri olarak.Örneğin:

function ExportToCsv(fileName, tableName) { 
 
    var data = GetCellValues(tableName); 
 
    var csv = ConvertToCsv(data); 
 
    if (navigator.userAgent.search("Trident") >= 0) { 
 
    window.CsvExpFrame.document.open("text/html", "replace"); 
 
    window.CsvExpFrame.document.write(csv); 
 
    window.CsvExpFrame.document.close(); 
 
    window.CsvExpFrame.focus(); 
 
    window.CsvExpFrame.document.execCommand('SaveAs', true, fileName + ".csv"); 
 
    } else { 
 
    var uri = "data:text/csv;charset=utf-8," + escape(csv); 
 
    var downloadLink = document.createElement("a"); 
 
    downloadLink.href = uri; 
 
    downloadLink.download = fileName + ".csv"; 
 
    document.body.appendChild(downloadLink); 
 
    downloadLink.click(); 
 
    document.body.removeChild(downloadLink); 
 
    } 
 
}; 
 

 
function GetCellValues(tableName) { 
 
    var table = document.getElementById(tableName); 
 
    var tableArray = []; 
 
    for (var r = 0, n = table.rows.length; r < n; r++) { 
 
    tableArray[r] = []; 
 
    for (var c = 0, m = table.rows[r].cells.length; c < m; c++) { 
 
     var text = table.rows[r].cells[c].textContent || table.rows[r].cells[c].innerText; 
 
     tableArray[r][c] = text.trim(); 
 
    } 
 
    } 
 
    return tableArray; 
 
} 
 

 
function ConvertToCsv(objArray) { 
 
    var array = typeof objArray != "object" ? JSON.parse(objArray) : objArray; 
 
    var str = "sep=,\r\n"; 
 
    var line = ""; 
 
    var index; 
 
    var value; 
 
    for (var i = 0; i < array.length; i++) { 
 
    line = ""; 
 
    var array1 = array[i]; 
 
    for (index in array1) { 
 
     if (array1.hasOwnProperty(index)) { 
 
     value = array1[index] + ""; 
 
     line += "\"" + value.replace(/"/g, "\"\"") + "\","; 
 
     } 
 
    } 
 
    line = line.slice(0, -1); 
 
    str += line + "\r\n"; 
 
    } 
 
    return str; 
 
};
<table id="dataTable"> 
 
    <tr> 
 
    <th>Name</th> 
 
    <th>Age</th> 
 
    <th>Email</th> 
 
    </tr> 
 
    <tr> 
 
    <td>Andrew</td> 
 
    <td>20</td> 
 
    <td>[email protected]</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Bob</td> 
 
    <td>32</td> 
 
    <td>[email protected]</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Sarah</td> 
 
    <td>19</td> 
 
    <td>[email protected]</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Anne</td> 
 
    <td>25</td> 
 
    <td>[email protected]</td> 
 
    </tr> 
 
</table> 
 

 
<a href="#" onclick="ExportToCsv('DefaultFileName', 'dataTable');return true;">Click this to download a .csv</a>

+1

Bu, Chrome'da çalışır, ancak IE'de başarısız olur. –

+1

Bu IE11 üzerinde çalışmıyor. – Madhura

3

Bu aynı zamanda kullandığım ve çalışma cevaplar biridir:

<input type="button" onclick="ExportToCsv('DefaultFileName','dataTable')"/>

  • JavaScript dosyası veya bölümüne bu ekle IE 10+ sürümleri için harika:

    var csv = JSON2CSV(json_obj);    
    var blob = new Blob([csv],{type: "text/csv;charset=utf-8;"}); 
    
    if (navigator.msSaveBlob) { // IE 10+ 
    navigator.msSaveBlob(blob, "fileName.csv") 
        } else { 
         var link = document.createElement("a"); 
         if (link.download !== undefined) { // feature detection 
          // Browsers that support HTML5 download attribute 
          var url = URL.createObjectURL(blob); 
          link.setAttribute("href", url); 
          link.setAttribute("download", "fileName.csv"); 
          link.style = "visibility:hidden"; 
          document.body.appendChild(link); 
          link.click(); 
          document.body.removeChild(link); 
         }   
        } 
    

    Bu yardımcı olur umarım.

  • 0

    kullanım Blob nesnesi bir damla nesnesi oluşturun ve msSaveBlob veya msSaveOrOpenBlob kod IE11 (diğer tarayıcılar için test edilmedi) çalışıyor kullanmak

    <script> 
    
    
    var csvString ='csv,object,file'; 
        var blobObject = new Blob(csvString); 
    
         window.navigator.msSaveBlob(blobObject, 'msSaveBlob_testFile.txt'); // The user only has the option of clicking the Save button. 
         alert('note the single "Save" button below.'); 
    
         var fileData = ["Data to be written in file."]; 
        //csv string object inside "[]" 
         blobObject = new Blob(fileData); 
         window.navigator.msSaveOrOpenBlob(blobObject, 'msSaveBlobOrOpenBlob_testFile.txt'); // Now the user will have the option of clicking the Save button and the Open button.`enter code here` 
         alert('File save request made using msSaveOrOpenBlob() - note the two "Open" and "Save" buttons below.'); 
         </script> 
    
    +0

    Çok teşekkür ederim. Bu çözüm IE11'de benim için çalıştı. – Madhura

    İlgili konular