REF! copyTo出错

时间:2017-12-08 13:05:38

标签: google-apps-script google-sheets

我只需要复制电子表格的一部分。如果我使用值复制,超链接在其他单元格中也不起作用(在这个单元格中也是如此)。

2 个答案:

答案 0 :(得分:0)

将范围从一张纸复制到另一张时,REF!通常会发生这种情况,因为复制的范围包括使用相对引用的公式,并且目标范围上的结果引用无效。

假设o B2你有= A1,这意味着从单元格中取出一个单元格的值,剩下一个单元格。如果将B2复制到C3,则生成的公式将为= B2,但如果将B2复制到A1,结果将为REF!因为A1没有在被推荐的位置,一个单元格向上,一个单元格离开。

修复将取决于您的公式的目的。有时候绝对引用($ A $ 1)会有效。

答案 1 :(得分:0)

一个想法是:

  1. 首先使用copyTo()复制粘贴所需范围,并使用仅限值选项。
  2. 然后使用getFormulas()从原始工作表中获取所有公式。
  3. 然后遍历此公式数组以获取包含"=hyperlink"字符串的每个公式的数组坐标。
  4. 每次找到包含"=hyperlink"的公式时,请使用setFormula()将其粘贴到目标范围。
  5. 以下是:

    function hyperCopy() {
    
      var ss = SpreadsheetApp.getActive(),
          sheet1 = ss.getSheetByName("Sheet1"),
          sheet2 = ss.getSheetByName("Sheet2"),
          lastRow = sheet1.getLastRow(),
          lastCol = sheet1.getLastColumn(),
          range1 = sheet1.getRange(1,1,lastRow,lastCol),
          range2 = sheet2.getRange(1,1,lastRow,lastCol);
    
      range2.clear();
      range1.copyTo(range2, {contentsOnly:true});
    
      var formulas = range1.getFormulas();
    
      formulas.forEach(function(e, i) { // e for element, i for index
        e.forEach(function(f, j) {      // f neatly stands for formula
    
          if (f.toUpperCase().indexOf("=HYPERLINK") !== -1) {
            sheet2.getRange(i + 1, j + 1).setFormula(f);
          }
    
        })
      })
    }
    

    确保将工作表名称调整为您自己的名称。