CopyPasteType.PASTE_VALUES не копирует только значения в Google Sheets - PullRequest
0 голосов
/ 28 апреля 2020

Я работаю над простым проектом, который ежедневно импортирует данные COVID в Google Sheet. Я столкнулся с проблемой, что, поскольку я использую IMPORT HTML, таблицы обновляются каждый раз, когда таблица обновляется на веб-сайте, который я использую. Я не хочу этого, поскольку цель состоит в том, чтобы сохранить таблицы от статистики каждого дня. Моим решением было скопировать таблицу, которую я импортирую, и вставить ее (только значения) прямо поверх нее. Все работает, включая копирование и вставку, но PASTE_VALUES, похоже, не работает. Когда я делаю это вручную, это решает мою проблему, но не когда это делается с помощью кода. Вот мой код.

function getData() { 


  //get yesterdays date for sheet name and title of table
  const today = new Date()
  const yesterday = new Date(today)

  yesterday.setDate(yesterday.getDate() - 1)

  today.toDateString()
  yesterday.toDateString()


  //open up a new spreadsheet with yesterday's date as name
  var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var yourNewSheet = activeSpreadsheet.getSheetByName(yesterday);

  if (yourNewSheet != null) {
    activeSpreadsheet.deleteSheet(yesterday);
  }

  yourNewSheet = activeSpreadsheet.insertSheet();
  yourNewSheet.setName(yesterday);
  yourNewSheet.activate();  


  //import table into new sheet and put yesterday's date as title on top of table
  //var sheetName = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(yesterday); 
  var queryString = Math.random(); 
  var cellFunction = '= IMPORTHTML("https://www.worldometers.info/coronavirus/country/us/","table", 2)'

  yourNewSheet.getRange('E1').setValue(yesterday);
  yourNewSheet.getRange('A3').setValue(cellFunction); 


  // copy and paste the range to values only so that the importHTML function doesn't download new data when it updates every day
  yourNewSheet.getRange('A3:Z100').copyTo(yourNewSheet.getRange('A3:Z100'), SpreadsheetApp.CopyPasteType.PASTE_VALUES);


}```

1 Ответ

2 голосов
/ 28 апреля 2020

Я встречался с такой ситуацией раньше, потому что copyTo(...) имеет 2 способа объявить

1) .copyTo(destination, copyPasteType, transposed)

yourNewSheet.getRange('A3:Z100').copyTo(yourNewSheet.getRange('A3:Z100'), 
SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)

поставить больше , false, если не будет читать 2) что-то вроде ничего не значит, я думаю

2) .copyTo(destination, options)

yourNewSheet.getRange('A3:Z100').copyTo(yourNewSheet.getRange('A3:Z100'), 
{contentsOnly:true})

для этого варианта нужно поставить {contentsOnly:true} вместо

вы можете использовать один из приведенных выше, результат будет таким же

Примечание:

Кроме того, перед копированием диапазона убедитесь, что скрипт обновляется с помощью SpreadsheetApp.flu sh () . В противном случае значения, сгенерированные формулой, могут вообще не копироваться.

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