La respuesta anterior funciona muy bien para YUI hasta la versión 3.4. Sin embargo, la tabla de datos se refactorizó comenzando con la versión 3.5. Mi convertidor incluye valores de celdas entre comillas dobles, escapa de comillas dobles en valores de celdas y maneja un nivel de anidación de columna, si existe.
Aquí es un violín que demuestra mi convertidor: 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;
}
Sabes, me sorprende lo rápido que es. –
... Y conserva la clasificación. ¡Increíble! –
¿Alguna idea de cómo hacer que la ventana emergente abra un cuadro de diálogo de guardar/descargar? Probablemente requiera cambiar el tipo de contenido del documento emergente más o menos, y me doy cuenta de que puede que no sea posible, pero si tienes una forma de hacerlo, será genial. – Meligy