2017-08-10 94 views
0

我知道,有數以百計的關於這裏這個主題的問題,但我仍然找不到搜索了一天之後滿意答案:出口2D JavaScript數組到Excel表

我有一個2D的JavaScript數組,我想以Excel工作表的形式下載。

這裏是代碼小提琴我走到這一步:

https://jsfiddle.net/3an24jmw/7/

下載工作,但有幾個問題,我不能天后解決的努力:

  1. 所有項目都在Excel工作表的第一列中結束,因爲Excel會將「,」分隔爲數據的一部分。如何以Excel理解的方式分離元素?
  2. 文件名是一些神祕的代碼。我怎樣才能設置文件名?
  3. 下載的文件有雙重.xls結尾(.xls.xls)。如何才能得到一個.xls結束?
  4. Excel會告訴我每次文件可能被損壞或不安全。我如何防止這種情況?

任何這些問題的幫助將不勝感激。

exportToCsv = function() { 
    var CsvString = ""; 
    Results.forEach(function(RowItem, RowIndex) { 
     RowItem.forEach(function(ColItem, ColIndex) { 
      CsvString += ColItem + ','; 
     }); 

     CsvString += "\r\n"; 
    }); 

    window.open('data:application/vnd.ms-excel,' + encodeURIComponent(CsvString)); 
} 

UPDATE

我只是偶然發現,即1 2和4可以通過csv更換vnd.ms-excel來解決。

該文件不再是.xls,但csv可以通過Excel打開,沒有問題,並且表現得像預期的那樣。

只剩下的問題是文件名!

更新2

最後經過2周搜索和嘗試的完整的工作日,我找到了解決方案,我想在這裏分享,幫助別人同樣的問題:

簡單地包括隱形<a>元素,該元素使用其屬性download="somedata.csv"定義該文件的有用名稱。

這是我最後的和功能齊全的小提琴:

https://jsfiddle.net/3an24jmw/25/

回答

0

Finaly後2周搜索和嘗試的完整的工作日,我找到了解決方案,我想在這裏分享,幫助別人同樣的問題:

只需提供一個無形的元素,利用其下載這給文件的有用名=「somedata.csv」屬性:

這是我最後的和功能齊全的小提琴:

https://jsfiddle.net/3an24jmw/25/

var Results = [ 
["Col1", "Col2", "Col3", "Col4"], 
["Data", 50, 100, 500], 
["Data", -100, 20, 100], 
]; 

exportToCsv = function() { 
    var CsvString = ""; 
    Results.forEach(function(RowItem, RowIndex) { 
    RowItem.forEach(function(ColItem, ColIndex) { 
     CsvString += ColItem + ','; 
    }); 
    CsvString += "\r\n"; 
    }); 
    CsvString = "data:application/csv," + encodeURIComponent(CsvString); 
    var x = document.createElement("A"); 
    x.setAttribute("href", CsvString); 
    x.setAttribute("download","somedata.csv"); 
    document.body.appendChild(x); 
    x.click(); 
} 
0

分隔的Excel預計,CSV取決於系統的區域設置列表分隔符。 通過添加"sep=,"作爲第一行,您可以提示Excel將哪個分隔符用於您的csv文件。 在你的情況下使用可以使用:var CsvString = '"sep=,"\r\n';

+0

感謝您的建議,但在小提琴中爲您工作? 當我嘗試它時,工作表的第一行被替換爲sep =, –

+0

我的不好,錯誤的雙引號。現在修復。 – Bas