From f43c758fdbcaf7c161288200a8e95a698b59cf6f Mon Sep 17 00:00:00 2001 From: Ben Miller Date: Sun, 17 Nov 2024 14:20:27 -0700 Subject: [PATCH] make newSku resiliant to column moves --- src/newSku.ts | 20 +++++++++++++------- src/sheetUtils.ts | 14 +++++++++++--- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/newSku.ts b/src/newSku.ts index 43f3623..9f091f5 100644 --- a/src/newSku.ts +++ b/src/newSku.ts @@ -1,6 +1,8 @@ import { + getColumnByName, getCellRangeByColumnName, getCellValueByColumnName, + getColumnValuesByName, } from "./sheetUtils" @@ -23,6 +25,10 @@ export function newSkuHandler(e: GoogleAppsScript.Events.SheetsOnEdit) { export function newSku(row: number) { let sheet = SpreadsheetApp.getActive().getSheetByName("product_inventory") + let skuPrefixCol = getColumnByName(sheet, "sku_prefix") + console.log("skuPrefixCol: " + skuPrefixCol) + let idCol = getColumnByName(sheet, "#") + console.log("idCol: " + idCol) let idCell = getCellRangeByColumnName(sheet, "#", row) let safeToOverwrite: string[] = ["?", "n", ""] let idCellValue = idCell.getValue() @@ -32,20 +38,20 @@ export function newSku(row: number) { console.log("ID '" + idCellValue + "' is not safe to overwrite, returning") return } - var idArray = sheet.getRange(2, 9, sheet.getLastRow(), 1).getValues() + var skuArray = getColumnValuesByName(sheet, "sku") var regExp = new RegExp(`^` + skuPrefixCellValue + `-0*(\\d+)$`) console.log("regExp: " + regExp.toString()) var maxId = 0 - for (let i = 0; i < idArray.length; i++) { + for (let i = 0; i < skuArray.length; i++) { console.log("checking row " + (i + 1)) - if (null == idArray[i] || String(idArray[i]) == "") { - console.log("ID cell looks null") + if (null == skuArray[i] || String(skuArray[i]) == "") { + console.log("SKU cell looks null") continue } - console.log("ID cell: '" + idArray[i] + "'") - var match = regExp.exec(String(idArray[i])) + console.log("SKU cell: '" + skuArray[i] + "'") + var match = regExp.exec(String(skuArray[i])) if (null === match) { - console.log("ID cell did not match") + console.log("SKU cell did not match") continue } let numId = Number(match[1]) diff --git a/src/sheetUtils.ts b/src/sheetUtils.ts index ee6b367..45480b5 100644 --- a/src/sheetUtils.ts +++ b/src/sheetUtils.ts @@ -24,12 +24,20 @@ export function getCellValueByColumnName( export function getColumnRangeByName( sheet: GoogleAppsScript.Spreadsheet.Sheet, columnName: string +) { + let column = getColumnByName(sheet, columnName) + if (column != -1) { + return sheet.getRange(2, column, sheet.getMaxRows()) + } +} + +export function getColumnByName( + sheet: GoogleAppsScript.Spreadsheet.Sheet, + columnName: string ) { let data = sheet.getRange("A1:1").getValues() let column = data[0].indexOf(columnName) - if (column != -1) { - return sheet.getRange(2, column + 1, sheet.getMaxRows()) - } + return column + 1 } export function getColumnValuesByName(