I’m trying to generate a CSV file in n8n from JSON input, but the output file is always empty. Here’s my current JavaScript function:
function convertirACSV(input) {
const filas = [];
const encabezado = [
"Proveedor Razón Social", "Proveedor CIF", "Proveedor Dirección", "Proveedor Contacto",
"Cliente Razón Social", "Cliente CIF", "Cliente Dirección", "Cliente Código Postal",
"Fecha Factura", "Número Pedido", "Código Obra", "Descripción Obra",
"Descripción", "Cantidad", "Precio Unitario", "Dto.", "IVA", "Total", "Fecha",
"Totales Base Imponible", "Totales Retención IRPF", "Totales IVA", "Totales Total Bruto",
"Vencimientos Tipo", "Vencimientos Porcentaje", "Vencimientos Base Imponible",
"Vencimientos Importe IVA", "Vencimientos Fecha Vencimiento",
"Vencimientos Importe a Pagar", "Vencimientos Estado",
"Condiciones de pago Forma de Pago", "Condiciones de pago IBAN"
];
filas.push(encabezado);
input.forEach(factura => {
const fila = [
factura.json.Proveedor["Razón social"] || '',
factura.json.Proveedor["CIF"] || '',
factura.json.Proveedor["Dirección"] || '',
factura.json.Proveedor["Contacto"] || '',
factura.json.Cliente["Razón social"] || '',
factura.json.Cliente["CIF"] || '',
factura.json.Cliente["Dirección"] || '',
factura.json.Cliente["Código postal"] || '',
factura.json["Fecha factura"] || '',
factura.json["Número pedido"] || '',
factura.json["Código obra"] || '',
factura.json["Descripción obra"] || '',
factura.json.Totales["Base imponible"] || '',
factura.json.Totales["Retención IRPF (15%)"] || '',
factura.json.Totales["IVA"] || '',
factura.json.Totales["Total bruto"] || '',
factura.json.Vencimientos && factura.json.Vencimientos[0] ? factura.json.Vencimientos[0]["Tipo"] : '',
factura.json.Vencimientos && factura.json.Vencimientos[0] ? factura.json.Vencimientos[0]["Porcentaje"] : '',
factura.json.Vencimientos && factura.json.Vencimientos[0] ? factura.json.Vencimientos[0]["Base imponible"] : '',
factura.json.Vencimientos && factura.json.Vencimientos[0] ? factura.json.Vencimientos[0]["Importe IVA"] : '',
factura.json.Vencimientos && factura.json.Vencimientos[0] ? factura.json.Vencimientos[0]["Fecha vencimiento"] : '',
factura.json.Vencimientos && factura.json.Vencimientos[0] ? factura.json.Vencimientos[0]["Importe a pagar"] : '',
factura.json.Vencimientos && factura.json.Vencimientos[0] ? factura.json.Vencimientos[0]["Estado"] : '',
factura.json['Condiciones de pago'] ? factura.json['Condiciones de pago']["Forma de pago"] : '',
factura.json["Condiciones de pago"] ? factura.json["Condiciones de pago"]["IBAN"] : ''
];
filas.push(fila);
});
// Convertir las filas en texto CSV
const csvTexto = filas.map(fila => fila.join(",")).join("\n");
const binaryData = new Uint8Array(csvTexto.split('').map(c => c.charCodeAt(0)));
return [
{
json: {},
binary: {
data: {
data: binaryData,
mimeType: 'text/csv',
fileName: 'facturas.csv'
}
}
}
];
}
return convertirACSV($input.all());
However, when I run this function in n8n, the generated CSV file is empty.
- Could there be an issue with how I’m handling binary data in n8n?
- Is there a better way to generate a CSV file from JSON input in n8n?
- Am I missing something in how n8n processes binary data for CSV files?
Any help would be greatly appreciated!
Share the output returned by the last node
Information on your n8n setup
- n8n version:
- Database (default: SQLite):
- n8n EXECUTIONS_PROCESS setting (default: own, main):
- Running n8n via (Docker, npm, n8n cloud, desktop app):
- Operating system: