Экспорт данных из таблицы данных YUI - PullRequest
8 голосов
/ 18 марта 2010

Какой самый простой / быстрый способ извлечь данные из таблицы данных YUI и превратить их в одну строку CSV или TSV? Я просто хочу реализовать способ, позволяющий одним щелчком мыши получить всю DataTable (она должна сохранить применяемую в настоящее время сортировку) в форме, которую пользователи могут вставить в электронную таблицу.

Мой DataTable может стать довольно большим - от 5000 до 10000 строк, от 5 до 10 столбцов, поэтому эффективность имеет значение.

Ответы [ 2 ]

6 голосов
/ 19 марта 2010

Как насчет этого:

<code>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("
п "); newWin.document.close (); }

Будет отображать содержимое таблицы данных в виде TSV в новом окне. Он не обрабатывает данные с вкладками в нем, но это будет просто некоторые дополнительные замены на oData[aCols[j].key].

0 голосов
/ 14 сентября 2013

Приведенный выше ответ прекрасно работает для YUI до версии 3.4. Однако данные таблицы были реорганизованы, начиная с версии 3.5. Мой конвертер заключает значения ячеек в двойные кавычки, экранирует двойные кавычки в значениях ячеек и обрабатывает один уровень вложенности столбцов, если он существует.

Вот скрипка, которая демонстрирует мой конвертер: http://jsfiddle.net/geocolumbus/AFB3h/3/

// 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;
}
...