将excel文件导入和导出到javascript数组

时间:2014-12-16 18:37:16

标签: javascript excel

我目前正在寻找一种快速有效的方法将excel文件导入javascript数组,并将其导出。我在这里尝试了这个建议:

https://stackoverflow.com/a/27474951/4346569

但问题是检查控制台,它显示输出是对象,所以他们是JSON对象?是因为我的excel文件有超过1列吗?在那种情况下,我怎么能这样做:(?

我还需要一种方法来做同样的事情,但方式相反。有人可以就此提出建议吗?

谢谢!

编辑:我想要导出但现在我仍然坚持如何能够输出到excel。我需要根据规则指定一些单元格。谁能给我一些指导呢?

2 个答案:

答案 0 :(得分:0)

这是更灵活的gridExportToExcel()函数的示例,您可以在其中对单元格进行着色和格式化。可能需要先更改它才能直接运行它。

所有数据都存储在网格变量中,并带有以下列:

  • grid.data - 对象数组
  • grid.columns - 列对象数组
    • 类型 - "数字" - 对于数值数据类型
    • kindid - subtype,like" money"或日期

这些代码使用Lodash库的一些功能。

$(function() {
    window.gridExportToExcel = (function () {
        var a = document.createElement("a");
        document.body.appendChild(a);
        a.style = "display: none";
        return function () {
            var s = gridGenerateExcel();
            var blob = new Blob([s], { type: 'application/vnd.ms-excel' });
            url = window.URL.createObjectURL(blob);
            a.href = url;
            a.download = page.pagename+".xls";
            a.click();
            window.URL.revokeObjectURL(url);
        };
    }());
});

function gridGenerateExcel(title) { 
    if (_.isUndefined(title)) title = "Sheet1";
    var s = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" \
    xmlns="http://www.w3.org/TR/REC-html40"><head> \
    <meta charset="utf-8" /> \
    <!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets> \
      <x:ExcelWorksheet><x:Name>' + title + '</x:Name><x:WorksheetOptions><x:DisplayGridlines/>     </x:WorksheetOptions> \
    </x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>';

    s += '<colgroups>';
    grid.columns.forEach(function (col) {
        s += '<col style="width: '+col.width+'px"></col>';
    });

    s += '<thead><tr>';
    grid.columns.forEach(function (col) {
        s += '<th style="background-color: #E5E5E5; border: 1px solid black;">' + col.name + '</th>';
    });

    s += '<tbody>';
    _.forEach(grid.data,function(d){
        s += '<tr>';

        grid.columns.forEach(function (col) {
            var value = d[col.id];

            s += '<td ';
            if (col.kindid == "money") {
               s += "style = 'mso-number-format:\"\\#\\,\\#\\#0\\\\ _р_\\.\";white-space:normal;'"; 
            } else if (col.type == "numeric") s += "";//" style = 'mso-number-format:\"\\@\";'";
            else if (col.kindid == "date") s += " style='mso-number-format:\"Short Date\";'";
            else s += " style='mso-number-format:\"\\@\";'";
            s += '>';
            if(_.isUndefined(value) || _.isNull(value)) { 
                s += ''; 
            } else if (col.kindid == "date") {
                s += moment(value).format('DD.MM.YY');
            } else if (col.kindid == "money") {
                s += formatMoney(value.toFixed(2));
            } else if (col.type == "numeric") {
                s += value.toString(); 
            } else s += d[col.id];
        });
    });
    s += '</table></body></html>';

    return s;
}

答案 1 :(得分:0)

https://www.npmjs.com/package/xlsx

这里试试这个安静高效的

var workbook = XLSX.read(data, {
        type: rABS ? 'binary' : 'array',
        WTF: 1,
        header: 1 });
    console.log(workbook.Strings);

这是我用来获取对象数组的东西