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