Приведенный выше ответ прекрасно работает для 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;
}