Среди многих лучших сценариев Google Apps Script , что касается повышения производительности скрипта, рекомендуется минимизировать обращения к другим сервисам:
Использование операций JavaScript в вашем скрипте значительнобыстрее, чем звонить в другие службы. Все, что вы можете выполнить в самом скрипте Служб Google, будет намного быстрее, чем совершать звонки, требующие извлечения данных с серверов Google или внешнего сервера, такие как запросы к электронным таблицам, документам, сайтам, переводу, UrlFetch и т. Д. Ваши скрипты будут работать быстрее, если вы сможете найти способы минимизировать вызовы, которые скрипты делают с этими сервисами.
В результате при работе с GAS в электронной таблице обычной практикой является копирование значений излист в целом в 2D-массив, выполните все манипуляции с массивом, затем сбросьте все данные из массива обратно на лист.
После того, как вы скопировали все данные из листа в 2D-массив, обработка столбцов можетбыть сложным, особенно с большими наборами столбцов, поэтому может быть удобно использовать функцию, которая будет извлекать / устанавливать данные из двумерного массива с использованием нотации A1, поскольку это позволяет визуально определить на листе, какой диапазон является правильным, при использованииФункция транскодирования Javascript для соответствующей идентификации столбцов и строк.
Не изобретая колесо, мне стало интересно, написал ли кто-нибудь код для извлечения данных из двумерного массива в качестве подмассива, используя нотацию A1 диапазона электронной таблицы для ссылки на границыподмассива.
Например, принимая пользовательскую функцию getRange
:
var SS = SpreadsheetApp.openById(myID); // open spreadsheet
var sheet = SS.getSheetByName("Test"); // get sheet
var sheetValues = sheet.getSheetValues(1,1,-1,-1); // copy all values from sheet to 2D array
// samples: how the function could be invoked to extract subarray using A1 notation
var subArray = getRange(sheetValues, "A2:A"); // returns a "column" from the array begin at row 2
subArray = getRange(sheetValues, "A2"); // returns a "cell" from the array (1,0)
subArray = getRange(sheetValues, "B2:D3"); // returns a 2D subarray
Аналогично this
Редактировать:
Я скопировал следующий код из другого аналогичного поста , и теперь это работает, когда я правильно установил параметры:
var matrix = [
["a1", "b1", "c1", "d1"],
["a2", "b2", "c2", "d2"],
["a3", "b3", "c3", "d3"],
["a4", "b4", "c4", "d4"]
]
var startRow = 1
var startCol = 0
var endRow = 2
var endCol = 0
var section = matrix.slice(startRow, endRow + 1).map(i => i.slice(startCol, endCol + 1))
console.log(JSON.stringify(section))
Я продолжу исследовать транскодирование A1!