Google Sheets Apps 脚本追加行和超链接

Googlesheets Apps Script append row and hyperlink

我有一个代码,可以在对电子表格进行的每次编辑后附加行,并包含以下详细信息:

Date, Time, Sheet Name, Cell Location, User

代码是:

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var sheet = ss.getActiveSheet();
  var timestamp = new Date();
  var sheetName = sheet.getName();


  sheet.appendRow([Utilities.formatDate(timestamp, "GMT", "dd-MMM-yyyy"),
  Utilities.formatDate(timestamp, "GMT", "E"),
  Utilities.formatDate(timestamp, SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone(), "HH:mm:ss"),
  sheetName,
  sheet.getActiveCell().getA1Notation(),
  Session.getActiveUser().getEmail()]);

}

我真正想做的是使用此函数将 'Cell Location' 部分超链接到原始位置:

sheet.getRange(1,1)
.setValue('=hyperlink("https://docs.google.com/spreadsheets/d/'+ss.getId()
+'/edit#gid='
+ss.getActiveSheet().getSheetId()
+'&range='
+sheet.getActiveCell().getA1Notation()+'")');

所以最终代码是:

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var sheet = ss.getActiveSheet();
  var timestamp = new Date();
  var sheetName = sheet.getName();

  sheet.appendRow([Utilities.formatDate(timestamp, "GMT", "dd-MMM-yyyy"),
  Utilities.formatDate(timestamp, "GMT", "E"),
  Utilities.formatDate(timestamp, SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone(), "HH:mm:ss"),
  sheetName,

  .setValue('=hyperlink("https://docs.google.com/spreadsheets/d/'+ss.getId()
   +'/edit#gid='
   +ss.getActiveSheet().getSheetId()
   +'&range='
   +sheet.getActiveCell().getA1Notation()+'")'),

  Session.getActiveUser().getEmail()]);

}

但这不起作用。如有任何建议,我们将不胜感激。

我怀疑是因为我开始时是用 .setValue().. 看起来不对,但我不确定..

谢谢

在您作为最终代码包含的内容中,您没有在 .setValue() 之前包含范围。在这种情况下你甚至不需要 .setValue 因为你附加的值直接在行中。所以你可以尝试这样的事情:

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var sheet = ss.getActiveSheet();
  var timestamp = new Date();
  var sheetName = sheet.getName();

  var link = '=hyperlink("https://docs.google.com/spreadsheets/d/'+ss.getId()
  +'/edit#gid='+ss.getActiveSheet().getSheetId()+'&range='
  +sheet.getActiveCell().getA1Notation()+'")';

  sheet.appendRow([Utilities.formatDate(timestamp, "GMT", "dd-MMM-yyyy"), 
  Utilities.formatDate(timestamp, "GMT", "E"),
  Utilities.formatDate(timestamp, 
  SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone(), "HH:mm:ss"),
  sheetName,link,Session.getActiveUser().getEmail()]);
}