Добавить несколько диапазонов в одной функции в листах Google - PullRequest
0 голосов
/ 21 января 2019

Я недавно начал писать простые функции для листов Google, и я хотел бы расширить следующую функцию для всех диапазонов: D10: D12, H10: H12, D16: D18, H16: H18, D22: D24,H22: H24, D28: D30, H28: H30, D34: D36 и H34: H36.

Какой синтаксис используется в скобках getRange?

function nextRound() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var spreadsheet = SpreadsheetApp.getActive();
 var cell = spreadsheet.getRange("D10");
 var cellValue = cell.getValue();

  cell.setValue(cellValue - 1);
}

Поскольку эта функция правильно работает для ячейки D10, но если я изменю D10 на D10: D12, она поместит продажную стоимость с D10 -1 в две другие ячейки, и это не то, что мне нужно,Когда я запускаю функцию, я хочу, чтобы новое значение в D10 было D10 - 1 (как оно работает в настоящее время), но новое значение D11 будет D11 - 1 и т. Д.

О, также, есливозможно, я бы хотел добавить в кнопку вторую функцию для очистки данных из того же диапазона ячеек, когда одна из ячеек достигает 0 или отрицательных чисел.

Example

1 Ответ

0 голосов
/ 22 января 2019
  1. Вы хотите добавить 1 ко всем ячейкам D10: D12, H10: H12, D16: D18, H16: H18, D22: D24, H22: H24, D28: D30, H28: H30, D34: D36и H34: H36.
  2. Вы хотите очистить ячейку, когда значение ячейки меньше 0.

Если мое понимание верно, как насчет этого ответа?Я использовал 2 метода Values.batchGet () и Values.batchUpdate () Sheets API для вашей ситуации, потому что в этом случае я думал, что стоимость процесса Sheets API ниже, чем getValues ​​() и setValues ​​()SpreadsheetApp.Поэтому я думаю, что есть несколько ответов для вашей ситуации.Поэтому, пожалуйста, подумайте об этом как об одном из них.

Когда вы используете Sheets API, пожалуйста, включите Sheets API в Advanced Google Services и консоли API.О том, как включить API листов, можно узнать по здесь .

Для вопроса 1:

Пожалуйста, измените nextRound() следующим образом.

function nextRound() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var spreadsheet = SpreadsheetApp.getActive();
  var id = ss.getId();
  var sheetName = spreadsheet.getSheetName();
  var ranges = ["D10:D12", "H10:H12", "D16:D18", "H16:H18", "D22:D24", "H22:H24", "D28:D30", "H28:H30", "D34:D36", "H34:H36"];
  ranges = ranges.map(function(e) {return sheetName + "!" + e});
  var r = Sheets.Spreadsheets.Values.batchGet(id, {ranges: ranges});
  var resource = {
    data: r.valueRanges.map(function(e) {return {
      range: e.range,
      values: e.values.map(function(f) {return [Number(f[0]) + 1]}),
    }}),
    valueInputOption: "USER_ENTERED",
  };
  Sheets.Spreadsheets.Values.batchUpdate(resource, id);
}

Для вопроса 2:

Пожалуйста, измените сценарий «Для вопроса 1» следующим образом.

С:
values: e.values.map(function(f) {return [Number(f[0]) + 1]}),
Кому:
values: e.values.map(function(f) {return [Number(f[0]) <= 0 ? "" : Number(f[0])]}),

Примечание:

  • Про "Для вопроса 2", про "ясно" вы говорите, я понял, что вы хотите удалить значение.Если вы хотите указать другое значение, измените его.
  • Если вы хотите запустить сценарий «Для вопроса 2», когда есть несколько ячеек с пустым значением, измените его следующим образом.
    • values: e.values.map(function(f) {return [Number(f[0]) <= 0 ? "" : Number(f[0]) || ""]}),.

Ссылки:

Если я неправильно понял ваш вопрос, пожалуйста, сообщите мне.Я хотел бы изменить его.

Редактировать:

Причиной ошибки была пустая ячейка.Поэтому, пожалуйста, измените следующим образом.

Для сценария Вопроса 1, пожалуйста, измените следующим образом.

С:
values: e.values.map(function(f) {return [Number(f[0]) + 1]}),
Кому:
values: e.values ? e.values.map(function(f) {return [f[0] ? Number(f[0]) + 1 : ""]}) : null,

Для сценария Вопроса 2, пожалуйста, измените как

От:
values: e.values.map(function(f) {return [Number(f[0]) <= 0 ? "" : Number(f[0])]}),
До:
values: e.values ? e.values.map(function(f) {return [Number(f[0]) <= 0 || !f[0] ? "" : Number(f[0])]}) : null,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...