2012-11-20 37 views
3

有沒有辦法使用純JavaScript(離線,本地)創建CSV文件並將該文件下載到本地文件系統?該方法應該在IE9或更低版本中工作。在Internet Explorer中離線創建csv文件(客戶端)

我試過downloadify,但跨域問題阻止我在本地使用它。我也嘗試創建一個Base64編碼的字符串併發布text/csv數據URI,但IE似乎不支持該特定情況下的數據URI。

+0

你可以在IE的客戶端VBScript中做到這一點。雖然安全設置需要更改以允許這樣做。 –

+1

請看看我的回答:http://stackoverflow.com/a/9686960/1169519。 – Teemu

+0

@Teemu明天我肯定會嘗試一下,它看起來像一個小小的瀏覽器/功能檢測,我可以同時使用HTML5文件API和HTA以具有跨瀏覽器兼容的本地應用程序! – Moses

回答

0

出於安全原因,不可以在本地創建文件並將其保存到用戶的文件系統。 JavaScript根本不允許它。該文件將需要創建服務器端,用戶將需要下載它。

編輯:其實,你可以訪問使用HTML5本地文件系統,但它似乎IE9 doesn't support the File API

1

下面的方法在IE11 +,25 +的Firefox和Chrome 30+作品:

<a id="export" class="myButton" download="" href="#">export</a> 
<script> 
    function createDownloadLink(anchorSelector, str, fileName){ 
     if(window.navigator.msSaveOrOpenBlob) { 
      var fileData = [str]; 
      blobObject = new Blob(fileData); 
      $(anchorSelector).click(function(){ 
       window.navigator.msSaveOrOpenBlob(blobObject, fileName); 
      }); 
     } else { 
      var url = "data:text/plain;charset=utf-8," + encodeURIComponent(str); 
      $(anchorSelector).attr("download", fileName); 
      $(anchorSelector).attr("href", url); 
     } 
    } 

    $(function() { 
     var str = "hi,file"; 
     createDownloadLink("#export",str,"file.txt"); 
    }); 

</script> 

在操作中查看:JS Fiddle

Firefox和Chrome支持數據URI進行導航,這使我們能夠創建導航到數據URI的文件,而IE不支持它的安全目的。

另一方面,IE有保存blob的API,可用於創建和下載文件。

+0

我只是在IE 11上測試過它,它不工作。 Chrome和Firefox正在運行 –

+0

針對IE11的新更新可能無法從IFrame中保存Blob,並且JSFiddle通過iframe運行該頁面。但是,這仍然可以在普通頁面上運行。請參閱上述示例的JSFiddle演示頁面:http://jsfiddle.net/Kg7eA/show/ –

+0

請參閱http://stackoverflow.com/questions/21893463/javascript-to-download-string它在IE上運行得非常好。只需以.csv擴展名重命名該文件,並將格式化的csv數據推送到該文件中即可。我正在認真考慮告訴我的客戶,我的先決條件是沒有IE –

5

如果你想在Excel 2013與正確UTF8打開CSV,你應該添加UTF8 BOM到DINESH這樣ygv代碼:

<a id="export" class="myButton" download="" href="#">export</a> 
<script> 
    function createDownloadLink(anchorSelector, str, fileName){ 
     if(window.navigator.msSaveOrOpenBlob) { 
      var fileData = ['\ufeff'+str]; 
      blobObject = new Blob(fileData); 
      $(anchorSelector).click(function(){ 
       window.navigator.msSaveOrOpenBlob(blobObject, fileName); 
      }); 
     } else { 
      var url = "data:text/plain;charset=utf-8,%EF%BB%BF" + encodeURIComponent(str); 
      $(anchorSelector).attr("download", fileName); 
      $(anchorSelector).attr("href", url); 
     } 
    } 

    $(function() { 
     var str = "hi,file"; 
     createDownloadLink("#export",str,"file.txt"); 
    }); 

</script> 
+0

謝謝Gergo,這節省了我的一天。 –

相關問題