From 05e6f2a6ac43fb4059e7e6cc40af6c5d75e01c8b Mon Sep 17 00:00:00 2001 From: Jon Date: Tue, 24 Oct 2023 14:22:45 +0100 Subject: [PATCH] fix(Spreadsheet File Node): Fix include empty cells not working with v2 (#7505) Github issue / Community forum post (link here to close automatically): Ticket#763644 --- .../test/SpreadsheetFile.test.ts | 12 +++ .../SpreadsheetFile/test/includeempty.csv | 2 + .../SpreadsheetFile/test/workflow.empty.json | 90 +++++++++++++++++++ .../v2/SpreadsheetFileV2.node.ts | 5 ++ 4 files changed, 109 insertions(+) create mode 100644 packages/nodes-base/nodes/SpreadsheetFile/test/includeempty.csv create mode 100644 packages/nodes-base/nodes/SpreadsheetFile/test/workflow.empty.json diff --git a/packages/nodes-base/nodes/SpreadsheetFile/test/SpreadsheetFile.test.ts b/packages/nodes-base/nodes/SpreadsheetFile/test/SpreadsheetFile.test.ts index 83dacb85c6..55e64e2e23 100644 --- a/packages/nodes-base/nodes/SpreadsheetFile/test/SpreadsheetFile.test.ts +++ b/packages/nodes-base/nodes/SpreadsheetFile/test/SpreadsheetFile.test.ts @@ -166,6 +166,18 @@ describe('Execute Spreadsheet File Node', () => { }, }, }, + { + description: 'execute includeempty.json', + input: { + workflowData: loadWorkflow('workflow.empty.json', 'includeempty.csv'), + }, + output: { + nodeData: { + 'Include Empty': [[{ json: { A: '1', B: '', C: '3' } }]], + 'Ignore Empty': [[{ json: { A: '1', C: '3' } }]], + }, + }, + }, ]; const nodeTypes = Helpers.setup(tests); diff --git a/packages/nodes-base/nodes/SpreadsheetFile/test/includeempty.csv b/packages/nodes-base/nodes/SpreadsheetFile/test/includeempty.csv new file mode 100644 index 0000000000..f8ffb44c7c --- /dev/null +++ b/packages/nodes-base/nodes/SpreadsheetFile/test/includeempty.csv @@ -0,0 +1,2 @@ +A,B,C +1,,3 diff --git a/packages/nodes-base/nodes/SpreadsheetFile/test/workflow.empty.json b/packages/nodes-base/nodes/SpreadsheetFile/test/workflow.empty.json new file mode 100644 index 0000000000..49017cfe87 --- /dev/null +++ b/packages/nodes-base/nodes/SpreadsheetFile/test/workflow.empty.json @@ -0,0 +1,90 @@ +{ + "meta": {}, + "nodes": [ + { + "parameters": { + "fileFormat": "csv", + "options": { + "includeEmptyCells": false + } + }, + "id": "8aed098d-3c0b-43c9-b7e8-c4106c88b409", + "name": "Ignore Empty", + "type": "n8n-nodes-base.spreadsheetFile", + "typeVersion": 2, + "position": [ + 1160, + 500 + ] + }, + { + "parameters": {}, + "id": "649db2c5-27dc-4cec-b084-8982632311e7", + "name": "When clicking \"Execute Workflow\"", + "type": "n8n-nodes-base.manualTrigger", + "typeVersion": 1, + "position": [ + 720, + 360 + ] + }, + { + "parameters": { + "fileSelector": "includeempty.csv" + }, + "id": "5056b8c4-fb6e-4ca1-9bc1-33f5db4027ad", + "name": "Read Binary File", + "type": "n8n-nodes-base.readBinaryFiles", + "typeVersion": 1, + "position": [ + 940, + 360 + ] + }, + { + "parameters": { + "fileFormat": "csv", + "options": { + "includeEmptyCells": true + } + }, + "id": "a4822e75-d638-45c8-887f-0487d5237267", + "name": "Include Empty", + "type": "n8n-nodes-base.spreadsheetFile", + "typeVersion": 2, + "position": [ + 1160, + 280 + ] + } + ], + "connections": { + "When clicking \"Execute Workflow\"": { + "main": [ + [ + { + "node": "Read Binary File", + "type": "main", + "index": 0 + } + ] + ] + }, + "Read Binary File": { + "main": [ + [ + { + "node": "Include Empty", + "type": "main", + "index": 0 + }, + { + "node": "Ignore Empty", + "type": "main", + "index": 0 + } + ] + ] + } + } +} diff --git a/packages/nodes-base/nodes/SpreadsheetFile/v2/SpreadsheetFileV2.node.ts b/packages/nodes-base/nodes/SpreadsheetFile/v2/SpreadsheetFileV2.node.ts index 360b749cdf..0e951dbd0e 100644 --- a/packages/nodes-base/nodes/SpreadsheetFile/v2/SpreadsheetFileV2.node.ts +++ b/packages/nodes-base/nodes/SpreadsheetFile/v2/SpreadsheetFileV2.node.ts @@ -92,6 +92,11 @@ export class SpreadsheetFileV2 implements INodeType { to: maxRowCount > -1 ? maxRowCount : undefined, columns: options.headerRow !== false, onRecord: (record) => { + if (!options.includeEmptyCells) { + record = Object.fromEntries( + Object.entries(record).filter(([_key, value]) => value !== ''), + ); + } rows.push(record); }, });