重新计算电子表格副本中的公式

时间:2019-01-22 19:12:23

标签: google-apps-script google-sheets google-sheets-formula

我有一个用于出勤的电子表格,该电子表格链接到学生用来登录的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 :(得分:0)

您是对的,如果复制的工作表中包含的公式中包含对目标电子表格中尚不存在的工作表的引用,则它们将返回错误。

您可以按照数据流(从原始数据到最终公式)复制工作表,并且一旦所有工作表都位于目标电子表格中,就可以使用moveActiveSheet(position)

对其进行重新排序。

相关