Скрипт Google вырезает и вставляет скрипт - PullRequest
0 голосов
/ 01 мая 2020

все.

Видел множество вырезанных и вставленных скриптов Google Sheets, где все они в основном терпят неудачу из-за разницы между copy from source + paste in destination + delete source и cut source + paste in destination. Разница в том, что вставленный контент ссылается на те же ячейки, что и оригинал. Копирование на том же листе приводит к копированию формулы внутри ячейки и, в конечном итоге, к увеличению количества строк и столбцов нефиксированных ссылок на ячейки. Вставка скопированного содержимого на другой лист вызывает еще одно существенное различие между вышеупомянутыми двумя операциями - ссылочные значения формул вставленных ячеек с целевого листа, а не с исходного.

Как правильно выполнять вырезку и вставить Range в Google Sheets как скрипт? Я видел только этот как жизнеспособный ответ, но это сетевой запрос, а не скрипт Google Sheets. Возможно, можно отправить запрос из скрипта Sheets, но, вероятно, должен быть более интегрированный способ вырезать и вставить. Вероятно, способ HTTP-запроса предназначен для внешних приложений.

1 Ответ

0 голосов
/ 01 мая 2020

В Google Apps Script вы можете использовать API Sheets через Расширенные службы. Чтобы включить его, нажмите Resources>Advanced Google services...>Google Sheets API в меню редактора сценариев.

Как только вы его активируете, вы можете использовать те же самые конечные точки, перечисленные здесь .

Пример

  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let sheetId_1 = ss.getSheetByName("source").getSheetId();
  let sheetId_2 = ss.getSheetByName("destination).getSheetId();
  // Using the Sheets API to create the request body
  let request = Sheets.newCutPasteRequest();
  let source = {
    startColumnIndex : 0,
    endColumnIndex : 4,
    startRowIndex : 0,
    endRowIndex : 10,
    sheetId : sheetId_1
  }
  let destination = {
    columnIndex : 5,
    rowIndex : 0,
    sheetId : sheetId_2
  }
  request.source = source;
  request.destination = destination;
  request.pasteType = "PASTE_NORMAL";
  // Calling the Sheets API "batchUpdate" endpoint
  Sheets.Spreadsheets.batchUpdate({"requests": [{"cutPaste" : request }]}, ss.getId());

Справка

Расширенные службы Google

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