Пересчет формул в копии электронной таблицы - PullRequest
0 голосов
/ 22 января 2019

У меня есть электронная таблица, которую я использую для посещаемости, которая связана с формой Google, которую студенты используют для входа в систему. Я использую сценарий для копирования электронной таблицы в новый файл, но не форму, связанную с ним. Кажется, все работает, кроме некоторых из моих вкладок показывают #REF! и я должен войти в каждую ячейку и вручную обновить, чтобы все появилось правильно. Кажется, что ошибка связана с порядком копирования листов, поэтому если формула ищет лист, который еще не скопирован, она возвращает ошибку !? Один из обходных путей, который я обнаружил, - это переупорядочить вкладки на листе так, чтобы сначала копировались те вкладки, на которых хранятся мои необработанные данные из форм, хотя я бы предпочел, чтобы я мог пересчитать эти ячейки и иметь вкладки с необработанными данными в конце. Вот скрипт, который я использую:

function backUp() 
{
  //Open old spreadsheet
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  //Prepare new name
  var formattedDate = Utilities.formatDate(new Date(), "EST", "MMMM dd, yyyy' 'h:mm a");
  var name = spreadsheet.getName() + " Copy " + formattedDate;
  //Prepare file system objects
  var oldfile = DriveApp.getFileById(spreadsheet.getId());
  var destination = DriveApp.getFolderById("1MFp9_z1hs4e-tpa2m_5SUKorkCbqLruZ");
  //create new spreadsheet
  var newSpreadsheet = SpreadsheetApp.create(name);
  //move to destination folder
    var newFile = DriveApp.getFileById(newSpreadsheet.getId());
    var parents = newFile.getParents();
    destination.addFile(newFile);
  //copy all sheets to new spreadsheet
  var sheets = spreadsheet.getSheets();
  sheets.forEach(function(sheet){
    sheet.copyTo(newSpreadsheet).setName(sheet.getName());
  });
  //remove empty sheet (created with new spreadsheet)
  newSpreadsheet.deleteSheet(newSpreadsheet.getSheets()[0]);
}

1 Ответ

0 голосов
/ 24 января 2019

Вы правы, если на скопированном листе есть формулы, включающие ссылки на листы, которых еще нет в целевой электронной таблице, они вернут ошибку.

Вы можете скопировать листы, следуя потоку данных (от необработанных данных до конечных формул), и после того, как все листы окажутся в электронной таблице назначения, переупорядочить их, используя moveActiveSheet(position)

Относящиеся

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