Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从YUI数据表导出数据_Javascript_Html_Yui_Yui Datatable - Fatal编程技术网

Javascript 从YUI数据表导出数据

Javascript 从YUI数据表导出数据,javascript,html,yui,yui-datatable,Javascript,Html,Yui,Yui Datatable,从YUI数据表中获取数据并将其转换为单个CSV或TSV字符串的最简单/最快方法是什么?我基本上只想实现一种单击方式,将整个DataTable(它应该保留当前应用的排序)粘贴到用户可以粘贴到电子表格中的表单中 我的DataTable可能会非常大—5000到10000行,5到10列—所以效率很重要。像这样的东西怎么样: function dataTableAsCSV (myDataTable) { var i, j, oData, newWin = window.open(),

从YUI数据表中获取数据并将其转换为单个CSV或TSV字符串的最简单/最快方法是什么?我基本上只想实现一种单击方式,将整个DataTable(它应该保留当前应用的排序)粘贴到用户可以粘贴到电子表格中的表单中


我的DataTable可能会非常大—5000到10000行,5到10列—所以效率很重要。

像这样的东西怎么样:

function dataTableAsCSV (myDataTable) {

    var i, j, oData, newWin = window.open(),
        aRecs = myDataTable.getRecordSet().getRecords(),
        aCols = myDataTable.getColumnSet().keys;

    newWin.document.write("<pre>");

    for (i=0; i<aRecs.length; i++) {
        oData = aRecs[i].getData();

        for (j=0; j<aCols.length; j++) {
            newWin.document.write( oData[aCols[j].key] + "\t");

        }
        newWin.document.write("\n");

    }

    newWin.document.write("</pre>n");
    newWin.document.close();
}
函数dataTableAsCSV(myDataTable){
变量i,j,oData,newWin=window.open(),
aRecs=myDataTable.getRecordSet().getRecords(),
aCols=myDataTable.getColumnSet().keys;
newWin.document.write(“”);
// Function to convert a DataTable with zero or one nested columns to CSV
function convertToCSV(myDataTable) {
    var col,
    colIndex = 0,
        colKey,
        rowString,
        ret,
        cell,
        headerString = "";

    while (col = myDataTable.getColumn(colIndex++)) {
        if (col.children == null) {
            headerString += '"' + col.key + '",';
        } else {
            Y.Array.each(col.children, function (child) {
                headerString += '"' + child.key + '",';
            });
        }
    }
    ret = headerString.replace(/,$/, '\n');

    Y.Array.each(myDataTable.data.toJSON(), function (item) {
        colIndex = 0;
        rowString = "";
        while (col = myDataTable.getColumn(colIndex++)) {
            if (col.children == null) {
                cell = item[col.key].replace(/"/g, "\\\"");
                rowString += '"' + cell + '",';
            } else {
                Y.Array.each(col.children, function (child) {
                    cell = item[child.key].replace(/"/g, "\\\"");
                    rowString += '"' + cell + '",';
                });
            }
        }
        ret += rowString.replace(/,$/, '') + "\n";
    });

    return ret;
}

对于(i=0;i以上答案对于版本3.4之前的YUI非常有效。但是,数据表从版本3.5开始进行了重构。我的转换器将单元格值括在双引号中,将单元格值括在双引号中,并处理一级列嵌套(如果存在)

这是一把小提琴,演示了我的转换器:


你知道,我很惊讶它的速度有多快……而且它保留了排序。太棒了!你知道如何让弹出窗口打开一个保存/下载对话框吗?可能需要更改弹出文件的内容类型,我知道这可能不可能,但如果你有办法,那就太好了。非常有用。我查看了正在删除内容类型,但客户端不可能。您可以调用document.open(mimetype)但这不起作用,因为浏览器只将HTMLDocument实现为window.document。关于保存/下载对话框,您可以创建一个服务器端脚本,该脚本将作为参数传递给它。请确保为响应设置了正确的MIME类型。=)