Google Spreadsheets:如何将特定列的单元格值转换为包含单元格值的超链接?

时间:2014-01-20 22:05:50

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

我有一个包含15列和3个标题行的Google电子表格。还有数百行包含数据,并且不断添加新行。

我正在努力使列C和H的单元格值自动转换为包含链接中单元格值的超链接,并将单元格的值作为超链接文本。

例: 列C,第300行包含值v74k39ch;它应该成为:=HYPERLINK("http://www.example.com/v74k39ch","v74k39ch")

执行上述操作的Google Apps脚本应在手动输入数据或复制/粘贴到C或H列时执行。它还应该与数据集一起使用(例如复制/粘贴来自单个列的多行数据)在另一张纸上,用表格中的C或H列在表格上)。请注意,用于列C的URL与用于列H的URL不同。

以下是我开始使用的内容并且无效:

function onEdit(event) {
  var rng = event.source.getActiveRange();
  var val = rng.getValues();
  var col = rng.getColumn();
  if(col == 3) { 
    for(var i = 0; i < val.length; i++) { 
      rng.setValues('=HYPERLINK("http://www.example.com/'+val+'","'+val+'")');
    }
  }
  if(col == 8) { 
    for(var i = 0; i < val.length; i++) { 
      rng.setValues('=HYPERLINK("http://www.website.com/'+val+'","'+val+'")');
    }
  }
}

我做错了什么?我试图了解有关JavaScript基础知识的更多信息,但我不是一个经验丰富的程序员,编写这个脚本证明是一个令人困惑的任务。非常感谢任何指导。

2 个答案:

答案 0 :(得分:2)

你做得很好。

你缺少的是这个;

  • for循环将相同的字符串添加到范围val.length中 次。
  • 使用set.Values()注意复数“s”期待一个数组,你有 设置一个字符串。用[]包围它可能会有效。
  • 如果您在下面的代码中使用setValue(),它将起作用,但您应该这样做 使用setFormula()作为JKWA提到。

这是代码;

function onEdit(event) {
  var sheet = event.source.getActiveSheet();
  var rng   = sheet.getActiveRange();
  var val   = rng.getValues();
  var col   = rng.getColumn();
  var row   = rng.getRow();
  var h_string = '=HYPERLINK("http://www.example.com/'+val+'","'+val+'")';
  if(col == 3 || col == 8) { 
    ((col == 3)? col = "C" : col = "H");
    cell = sheet.getRange(col+row);
    cell.setFormula(h_string);
  }
}

答案 1 :(得分:0)

我不确定你在这里要做什么,但我可能会让你更近一点。

首先,我注意到你正在使用setValues()。这需要设置回矩形网格(二维数组)。您正在设置一个字符串值,该值应该适用于setValue(),但不适用于setValues()。

接下来,因为您正在使用公式,所以使用setFormulas()而不是setValues()可能会有更好的结果。

希望有所帮助。