BatchUpdate Google Apps Script автоматически очищает лист - PullRequest
1 голос
/ 09 июля 2020

Я работаю над вставкой некоторых данных csv в таблицу Google и имею код ниже. По какой-то причине, когда я запускаю myFunction (), данные мигают в Google Sheet, но затем мгновенно исчезают, как если бы вызывается sheet.clear (). Когда я комментирую sheet.clear (), данные копируются очень хорошо. Любые идеи, почему Sheet.clear () может вызываться не по порядку? Я не могу понять.

function myFunction(){
  var spreadsheetId = 'some Id'
  var csvFileId = 'some Id'
  var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName('Sheet1');
  sheet.clear();
  
  getCSVData(csvFileId, spreadsheetId);
}

function getCSVData(csvFileId, spreadsheetId){
  var data = DriveApp.getFileById(csvFileId)
  .getBlob()
  .getDataAsString();
  var sheetId = SpreadsheetApp.openById(spreadsheetId)
  .getSheets()[0]
  .getSheetId();
    
  var resource = {
    requests: [
      {
        pasteData: {
          data: data,
          coordinate: { sheetId: sheetId,
                       rowIndex: 0,
                       columnIndex: 0 },
          type: 'PASTE_VALUES',
          delimiter: ","
        },
      }
    ],
    includeSpreadsheetInResponse: true,
  };
  Sheets.Spreadsheets.batchUpdate(resource, spreadsheetId);
}

1 Ответ

2 голосов
/ 10 июля 2020

Всякий раз, когда вы читаете данные из электронной таблицы сразу после записи, вам следует подумать об использовании SpreadsheetApp.flu sh (), чтобы гарантировать, что все данные, которые вы ожидаете там, действительно доступны для чтения. Я предпочитаю хранить данные в массивах как можно дольше, чтобы обычно можно было выполнять одно чтение и запись. Но если вы переключитесь с одной функции на другую, это может оказаться невозможным. Одним из вариантов может быть передача данных напрямую последовательным функциям, чтобы им не приходилось снова читать данные из электронной таблицы.

...