使用第3张表格中的单元格值将Google表格复制到新表格

时间:2017-03-27 05:19:46

标签: google-apps-script google-sheets

我一直在寻找试图找到正确方法的论坛,但我似乎无法做到正确。这是我第一次使用Google Apps脚本,所以我正在学习,因为我要去。

这就是我要做的事。

1)我想将旧表的所有内容复制到新表中。该脚本将通过参考“统计”表单中的单元格b17来确定现有工作表名称,并将复制旧工作表,包括值格式,引用和公式。复制的工作表将从“统计”工作表的单元格c17中命名。

2)如果可能的话,我还想让旧表格删除所有引用,并在创建新工作表后保留值和格式。类似于copy all和ctrl-shift-v,除了一下子自动化它。

这是我目前的代码,不确定它是否正确

  function newSheetLast() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var first = ss.getSheetByName("Statistics").activate();
  var oldSheetName = ss.getRange('b17').getDisplayValue();
  var newSheetName = ss.getRange('c17').getDisplayValue();
  var sheet = ss.getSheetByName(oldSheetName).activate();
  var source = SpreadsheetApp.getActiveSpreadsheet().duplicateActiveSheet(newSheetName);
};

我在尝试时遇到困难1.我尝试了copyTo并且可以复制工作表,但是当我复制到新工作表时,它会丢失所有格式和公式。

我不确定如何尝试2

1 个答案:

答案 0 :(得分:0)

您的变量命名和复制工作表的工作方式有点令人困惑。 您应该能够直接复制工作表对象,或者至少能够尝试提供您尝试复制的工作表的名称但不是,它是在电子表格级别上,并且仅适用于活动工作表... < / p>

复制工作表会带有公式和格式。 使用setValues(getValues)可以覆盖静态值。

function newSheetLast() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var settings = ss.getSheetByName("Sheet1");
  var oldSheetName = settings.getRange('B17').getDisplayValue();
  var oldSheet = ss.getSheetByName(oldSheetName);
  var newSheetName = settings.getRange('C17').getDisplayValue();
  ss
      .getSheetByName(oldSheetName)
      .activate()
      .getParent()
      .duplicateActiveSheet()
      .setName(newSheetName);

  oldSheet.getDataRange().setValues(oldSheet.getDataRange().getValues());
};