【问题标题】:Convert formulas to results in two sheets within one spreadsheet将公式转换为一张电子表格中两张表格中的结果
【发布时间】:2019-09-02 01:02:42
【问题描述】:

我在一个电子表格中有两张工作表。两个原始工作表都包含公式。我需要将每张工作表的结果作为值复制到新工作表中。我编写了一个小例程来执行此操作,但出现错误,并且找不到原因。错误在var targetRange2 = targetSheet2.getRange("a1:h10");这一行中

我研究了 SO,并多次检查代码是否存在拼写错误、结构和编码错误。

function testCopyValuesAndFormat() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();

  ss.insertSheet("newSheet1");

  var sourceSheet1 = SpreadsheetApp.openById("10TzfBrSdQA_IPtLNvgpOHU-UaInTmM8xUpfBjYybDak").getSheetByName("first");
  var sourceRange1 = sourceSheet1.getRange("a1:h10");
  var targetSheet1 = SpreadsheetApp.openById("10TzfBrSdQA_IPtLNvgpOHU-UaInTmM8xUpfBjYybDak").getSheetByName("newSheet1");
  var targetRange1 = targetSheet1.getRange("a1:h10");

  targetRange1.setValues(sourceRange1.getValues());
  sourceRange1.copyTo(targetRange1, {formatOnly:true});

  ss.insertSheet("newSheet2");

  var sourceSheet2 = SpreadsheetApp.openById("10TzfBrSdQA_IPtLNvgpOHU-UaInTmM8xUpfBjYybDak").getSheetByName("second");
  var sourceRange2 = sourceSheet2.getRange("a1:h10");
  var targetSheet2 = SpreadsheetApp.openById("10TzfBrSdQA_IPtLNvgpOHU-UaInTmM8xUpfBjYybDak").getSheetByName("newSheet2");
  var targetRange2 = targetSheet2.getRange("a1:h10");

  targetRange2.setValues(sourceRange2.getValues());
  sourceRange2.copyTo(targetRange2, {formatOnly:true});

}

我希望我的电子表格中有 4 张工作表 - “first”、“second”、“newSheet1”和“newSheet2”。那没有发生。 2 个新工作表(“newSheet1”和“newSheet2”)均已正确创建,工作表内容从“first”正确传输到“newSheet 1”,但第二个工作表(“second”)的内容永远不会转移到“新表 2"。

我在 "var targetRange2 = targetSheet2.getRange("a1:h10");" 行收到一个错误,说 "TypeError: Cannot call method "getRange" of null. (line 20, file "Code ")。

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    newSheet2SpreadsheetApp.openById("10TzfBrSdQA_IPtLNvgpOHU-UaInTmM8xUpfBjYybDak") 中是否与ss 相同

    也许这可能有效。

    function testCopyValuesAndFormat() {
      var ss1=SpreadsheetApp.openById("10TzfBrSdQA_IPtLNvgpOHU-UaInTmM8xUpfBjYybDak");
      ss1.insertSheet("newSheet1");
      var sourceSheet1 = ss1.getSheetByName("first");
      var sourceRange1 = sourceSheet1.getRange("a1:h10");
      var targetSheet1 = ss1.getSheetByName("newSheet1");
      var targetRange1 = targetSheet1.getRange("a1:h10");
      targetRange1.setValues(sourceRange1.getValues());
      sourceRange1.copyTo(targetRange1, {formatOnly:true});
      var ss2=SpreadsheetApp.openById("10TzfBrSdQA_IPtLNvgpOHU-UaInTmM8xUpfBjYybDak");
      ss2.insertSheet("newSheet2");
      var sourceSheet2 = ss2.getSheetByName("second");
      var sourceRange2 = sourceSheet2.getRange("a1:h10");
      var targetSheet2 = ss2.getSheetByName("newSheet2");
      var targetRange2 = targetSheet2.getRange("a1:h10");
      targetRange2.setValues(sourceRange2.getValues());
      sourceRange2.copyTo(targetRange2, {formatOnly:true});
    }
    

    【讨论】:

    • 库珀,我很困惑。请教我为什么您的代码有效而我的代码无效。
    • 您将 newSheet1 和 newSheet2 都插入到活动电子表格中。我将 newSheet1 插入 id="10TzfBrSdQA_IPtLNvgpOHU-UaInTmM8xUpfBjYybDak" 并将 newSheet2 插入 id="10TzfBrSdQA_IPtLNvgpOHU-UaInTmM8xUpfBjYybDak"。简短的回答是 id="10TzfBrSdQA_IPtLNvgpOHU-UaInTmM8xUpfBjYybDak" 中不存在 newSheet2,因此 targetSheet2 未定义,因此其中不存在方法 getRange()。
    猜你喜欢
    • 1970-01-01
    • 2021-08-13
    • 2019-08-22
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2019-04-01
    相关资源
    最近更新 更多