Подстановка макросов в приложении - PullRequest
1 голос
/ 08 апреля 2020

У меня есть переменная sht = "Product" (имя листа)

У меня есть переменная hdr = "Itemcode" (заголовок столбца)

Теперь я хочу определить новую переменную с помощью имя «Product_Itemcode» (комбинация двух других переменных) и сохранить номер столбца в переменной. Я мог бы сделать это путем подстановки макросов (&) ранее, например

& sht_ & hdr

Как это сделать в скрипте приложения?

В моих данных много вкладок

https://docs.google.com/spreadsheets/d/19Z0Zkx4mBaniD9w9CdrhpB1GRHrkbBHx-FeOy48ax7g/edit?usp=sharing

Я хочу иметь возможность ссылаться на каждый столбец по имени (а не по номеру столбца), например

Продукты [i] [Код_продукта]

вместо Products [i] [0]

Таким образом, я могу вставить новый столбец или удалить столбец во вкладках без необходимости изменять код.

Теперь мне нужно найдите номер столбца по

  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sheets=ss.getSheets();
  var tsheet=ss.getSheetByName("Product");
  var shtname=tsheet.getName();
  var [hd_Product, ...data_Product] = tsheet.getDataRange().getDisplayValues();

  const Product_Code=hd_product.indexOf('Code');
  const Product_Item=hd_product.indexOf('Item');
  const Product_UOM=hd_product.indexOf('UOM');
  const Product_CAT=hd_product.indexOf('CAT');
  const Product_Price=hd_product.indexOf('Price');
  const Product_Min_Stock=hd_product.indexOf('Min_Stock');
  const Product_Lot=hd_product.indexOf('Lot');
  const Product_Now_Stock=hd_product.indexOf('Now_Stock');
  const Product_Upd_Date=hd_product.indexOf('Upd_Date');
  const Product_Vendor1=hd_product.indexOf('Vendor1');
  const Product_Vendor2=hd_product.indexOf('Vendor2');
  const Product_Vendor3=hd_product.indexOf('Vendor3');

Пришло время создать код для многих вкладок (с разными именами / именами заголовков). Это может быть автоматизировано?

1 Ответ

2 голосов
/ 08 апреля 2020
  • Вы хотите создать переменные, соответствующие индексу столбцов пастухов.
  • Вы хотите добиться этого с помощью скрипта Google Apps.

Если я понимаю правильно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

В этом ответе я хотел бы предложить использовать объект для достижения вашей проблемы.

Пример сценария:

function myFunction() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheets = ss.getSheets();
  const object = sheets.reduce((o, s) => {
    const sheetName = s.getSheetName();
    const headers = s.getRange(1, 1, 1, s.getLastColumn()).getDisplayValues()[0];
    headers.forEach((h, i) => o[`${sheetName}_${h}`] = i);
    return o;
  }, {});
  console.log(object)
}

Результат:

Когда вышеуказанный скрипт используется для вашей общей электронной таблицы, получается следующий результат. Например, в этом случае object.Product_Code возвращает 0. Итак, из вашего вопроса Products[i][Product_Itemcode] можно записать как Products[i][object.Product_Itemcode].

{
  "Product_Code": 0,
  "Product_Item": 1,
  "Product_UOM": 2,
  "Product_CAT": 3,
  "Product_Price": 4,
  "Product_Min_Stock": 5,
  "Product_Lot": 6,
  "Product_Now_Stock": 7,
  "Product_Upd_Date": 8,
  "Product_Vendor1": 9,
  "Product_Vendor2": 10,
  "Product_Vendor3": 11,
  "Vendor_Code": 0,
  "Vendor_Name": 1,
  "Vendor_Credit_Days": 2,
  "Vendor_Mobile": 3,
  "Vendor_Email": 4,
  ,
  ,
  ,

}

Примечание:

  • Пожалуйста, используйте этот скрипт с включением V8.

Ссылка:

Если я неправильно понял ваш вопрос, и это не то направление, которое вы хотите, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...