有没有一种方法可以通过脚本编辑器动态引用Google表格脚本中的单元格,以便在另一个单元格上创建注释?

时间:2019-05-02 01:06:22

标签: google-apps-script google-sheets

我希望能够使用该工作表其他列上的单元格值来快速,轻松地在多个Google表格单元格中添加注释(“插入菜单” /“注释”)。例如,F3将从X4抓取X3中的单元格值,而F4从X4中抓取。但是,如果我抓取G3,它将抓取Y3中的值(因此,它始终抓取同一行中的值,但始终向右抓取相同的列数(在这种情况下,始终向右抓18列)。我想获取这些值并将其粘贴到左侧的注释中(例如F,G列等)。我希望能够突出显示一个范围(F3-F10),运行Google脚本,然后将获取X3-X10上的所有值并将其粘贴在它们的相对行上。这可能吗?

我一直在寻找这个选项,搜索我能想到的每个范围的词,并且我已经很接近了,但是我一直陷于很多问题,最重要的是能够从中获取数据相对于我突出显示的范围,右边的列数相等。我发现this code使我很接近,但是我不知道如何编辑它来完成我需要的工作。它允许我创建菜单选项,该选项可用于在电子表格的第一个选项卡上提取A1的值(我在第二个选项卡上工作,并且只为我的所有便笺获取相同的数据)。这是我一直在处理的代码,也是我认为具有我需要的第二个功能的功能,例如抓取活动表。

function noteSetter() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[0]; //I need to make this grab the right sheet

 var cell = sheet.getRange(2, 2); //this and the line below it seem to be critical here...
 cell.setNote(sheet.getRange(1,1).getValue()); 
}

//below gives me the menu option to run the script, but I'm open to changing this
function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
  name : "Set cell note",
    functionName : "noteSetter"
  }];
  sheet.addMenu("Scripts", entries);
};

这是该帖子上使用的另一种功能,它具有我认为我需要的功能,但仍然无法获得单元格的相对引用。

function onEdit(e) {
  var sheet = SpreadsheetApp.getActiveSheet();
  if (sheet.getName() == "Project"){ //Change to your sheet name
    var sourceRange = e.source.getActiveRange();
    var sourceRow = sourceRange.getRow();
    var sourceColumn = sourceRange.getColumn();
    var sourceValue = sourceRange.getValue();

    if(sourceColumn == 1){ //Change to the column you want to get the value from
      var noteCell = sheet.getRange(sourceRow, 2); //The cell where the Note should be, B-column on the current row
      noteCell.setNote(sourceValue);
    }
  }
}

这就是我现在的位置,但是我可能已经搞砸了一些东西,因为它根本无法使用。

function noteSetter() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[0];

 var cell = sheet.getActiveRange();
 cell.setNote(sheet.getRange(sourceRow, sourceColumn).getValue());
}

function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
  name : "Set cell note",
    functionName : "noteSetter"
  }];
  sheet.addMenu("Scripts", entries);
};

关于如何进行这项工作的任何建议?

1 个答案:

答案 0 :(得分:0)

只需稍微闭合一下循环,下面就可以完成90%的工作。当我突出显示一个单元格时,它可以完美工作。但是,如果我突出显示更多内容(例如范围或数组),它将在我突出显示的所有单元格中仅将最上面和最左边的值作为注释。

function noteSetter() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  var row = sheet.getActiveRange().getRow();
  var column = sheet.getActiveRange().offset(0, 18);
  var cells = sheet.getActiveRange();

  cells.setNote((row, column).getValue());
}

我认为下一步是使用Selection类,但这对我来说已经足够了。