From 43fae950e627f36b78606ba4fc15673f603cd081 Mon Sep 17 00:00:00 2001 From: fntb <67187375+fntb@users.noreply.github.com> Date: Sat, 8 May 2021 05:50:25 +0200 Subject: [PATCH] :sparkles: Add support for files without headers to SpreadsheetFile node (#1738) When false the first row of the spreadsheet file is considered a data row and each row is parsed as an array --- .../nodes/SpreadsheetFile.node.json | 4 +-- .../nodes-base/nodes/SpreadsheetFile.node.ts | 30 +++++++++++++++++-- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/packages/nodes-base/nodes/SpreadsheetFile.node.json b/packages/nodes-base/nodes/SpreadsheetFile.node.json index dc8a94e23f..0f004d1d7c 100644 --- a/packages/nodes-base/nodes/SpreadsheetFile.node.json +++ b/packages/nodes-base/nodes/SpreadsheetFile.node.json @@ -1,7 +1,7 @@ { "node": "n8n-nodes-base.spreadsheetFile", - "nodeVersion": "1.0", - "codexVersion": "1.0", + "nodeVersion": "1.1", + "codexVersion": "1.1", "categories": [ "Data & Storage", "Core Nodes" diff --git a/packages/nodes-base/nodes/SpreadsheetFile.node.ts b/packages/nodes-base/nodes/SpreadsheetFile.node.ts index bbbc136c46..22208facf0 100644 --- a/packages/nodes-base/nodes/SpreadsheetFile.node.ts +++ b/packages/nodes-base/nodes/SpreadsheetFile.node.ts @@ -27,7 +27,7 @@ import { * @param {IDataObject} data The object to flatten * @returns */ -function flattenObject (data: IDataObject) { +function flattenObject(data: IDataObject) { const returnData: IDataObject = {}; for (const key1 of Object.keys(data)) { if (data[key1] !== null && (typeof data[key1]) === 'object') { @@ -296,6 +296,20 @@ export class SpreadsheetFile implements INodeType { default: 'Sheet', description: 'Name of the sheet to create in the spreadsheet.', }, + { + displayName: 'Header Row', + name: 'headerRow', + type: 'boolean', + displayOptions: { + show: { + '/operation': [ + 'fromFile', + ], + }, + }, + default: true, + description: 'Consider the first row as the header row or a data row.', + }, ], }, ], @@ -359,6 +373,9 @@ export class SpreadsheetFile implements INodeType { if (options.includeEmptyCells) { sheetToJsonOptions.defval = ''; } + if (!options.headerRow) { + sheetToJsonOptions.header = 1; // Consider the first row as a data row + } const sheetJson = xlsxUtils.sheet_to_json(workbook.Sheets[sheetName], sheetToJsonOptions); @@ -368,8 +385,15 @@ export class SpreadsheetFile implements INodeType { } // Add all the found data columns to the workflow data - for (const rowData of sheetJson) { - newItems.push({ json: rowData } as INodeExecutionData); + if (options.headerRow) { + for (const rowData of sheetJson) { + newItems.push({ json: rowData } as INodeExecutionData); + } + } else { + // Data was returned as an array - https://github.com/SheetJS/sheetjs#json + for (const rowData of sheetJson) { + newItems.push({ json: { row: rowData } } as INodeExecutionData); + } } }