首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HandsOnTable exportFile

HandsOnTable exportFile
EN

Stack Overflow用户
提问于 2016-10-13 10:17:14
回答 1查看 1.4K关注 0票数 1

我遵循示例将我的热下载到excel文件中。

问题是它做不到:

代码语言:javascript
复制
var exportPlugin = hot.getPlugin('exportFile');

它返回未定义的。不用说,如果我console.log“热”,它就是我所期望的对象。

手柄桌的版本是最近的版本(1.7.3)。

在我的表中有任何选项可以阻止我加载插件吗?

我使用以下选项创建了hot:

代码语言:javascript
复制
data: sourceData,
colHeaders: colHeaders,
rowHeaders: false,
nestedRows: false,
contextMenu: false,
formulas: true,
comments: true,
columns: columnsProperties,
cell: cellsProperties,
fixedColumnsLeft: categoryColumn+1,
manualColumnFreeze: true,

可以想象,sourceData、colHeaders、columnsProperties和cellsProperties都是在其他地方定义的。

我能很好地想象这张桌子。

谢谢

序列号

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-19 08:07:16

我在自己的项目中有一个特性,可以将表下载为CSV文件,您可以直接使用excel读取该文件,当然还可以根据需要转换为XLSX格式。

参见本JSFiddle中的示例

以下是一个通用函数,用于将JSON对象转换为csv文件并下载它(用于IE & chrome/Firefox等):

代码语言:javascript
复制
function JSONToCSVConvertor(JSONData, colHeaders) {
    var 
    arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData,
    CSV = '',   
    row = "",
    fileName = "handsontable.csv";

    // Put the header (based on the colHeaders of my table in my example)
    for (var index in colHeaders) {
        row += colHeaders[index] + ';';
    }
    row = row.slice(0, -1);
    CSV += row + '\r\n';

    // Adding each rows of the table
    for (var i = 0; i < arrData.length; i++) {
        var row = "";
        for (var index in arrData[i]) {
            row += arrData[i][index] + ';';
        }
        row = row.slice(0, -1);
        CSV += row + '\r\n';
    }

    if (CSV == '') {
        alert("Invalid data");
        return;
    }        

    // Downloading the new generated csv.
    // For IE >= 9
    if(window.navigator.msSaveOrOpenBlob) {
        var fileData = [CSV];
        blobObject = new Blob(fileData);
        window.navigator.msSaveOrOpenBlob(blobObject, fileName);
    } else { 
    // For Chome/Firefox/Opera
        var uri = 'data:text/csv;charset=utf-8,' + escape(CSV);

        var link = document.createElement("a");    
        link.href = uri;

        link.style = "visibility:hidden";
        link.download = fileName;

        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
    }
}

例如,您可以将其与按钮一起使用:

代码语言:javascript
复制
Handsontable.Dom.addEvent(save, 'click', function() {
    JSONToCSVConvertor(hot.getData(), hot.getSettings().colHeaders);
});

请注意,我使用了一个具有~10k行的表,它的工作原理就像一种魅力。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40018249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档