diff --git a/packages/web/src/forms/FormArgument.svelte b/packages/web/src/forms/FormArgument.svelte index 853509c6..1fa74f70 100644 --- a/packages/web/src/forms/FormArgument.svelte +++ b/packages/web/src/forms/FormArgument.svelte @@ -13,6 +13,8 @@ {#if arg.type == 'text'} +{:else if arg.type == 'number'} + {:else if arg.type == 'checkbox'} {:else if arg.type == 'select'} diff --git a/plugins/dbgate-plugin-excel/src/backend/reader.js b/plugins/dbgate-plugin-excel/src/backend/reader.js index 3535e40f..1eadc1eb 100644 --- a/plugins/dbgate-plugin-excel/src/backend/reader.js +++ b/plugins/dbgate-plugin-excel/src/backend/reader.js @@ -23,7 +23,7 @@ async function waitForDrain(stream) { }); } -async function reader({ fileName, sheetName, limitRows = undefined }) { +async function reader({ fileName, sheetName, skipHeaderRows, limitRows = undefined }) { const pass = new stream.PassThrough({ objectMode: true, highWaterMark: 100, @@ -32,10 +32,18 @@ async function reader({ fileName, sheetName, limitRows = undefined }) { const workbook = await loadWorkbook(fileName); const sheet = workbook.Sheets[sheetName]; + let range = undefined; + if (parseInt(skipHeaderRows) > 0) { + range = xlsx.utils.decode_range(sheet['!ref']); + range.s.r = parseInt(skipHeaderRows); + } + const rows = xlsx.utils.sheet_to_json(sheet, { header: 1, + range, blankrows: false, }); + const header = rows[0]; const structure = { __isStreamHeader: true, diff --git a/plugins/dbgate-plugin-excel/src/frontend/index.js b/plugins/dbgate-plugin-excel/src/frontend/index.js index 25ceab8b..8340d0e0 100644 --- a/plugins/dbgate-plugin-excel/src/frontend/index.js +++ b/plugins/dbgate-plugin-excel/src/frontend/index.js @@ -42,6 +42,14 @@ const fileFormat = { label: 'Create single file', direction: 'target', }, + { + type: 'number', + default: '0', + name: 'skipHeaderRows', + apiName: 'skipHeaderRows', + label: 'Skip header rows', + direction: 'source', + }, ], getDefaultOutputName: (sourceName, values) => {