要使此特定功能正常工作,我正在一个简单的测试表中对其进行尝试。
我在FEBRUARI工作表中有两个工作表(状态和FEBRUARI),我选择了某个单元格。该单元格具有一个值。我要脚本执行的操作是查看该值,然后在STATUS表中找到该值(例如,它在A1中找到了它),然后将B1中的值返回到FEBRUARI表中所选单元格中的单元格注释中。例如:在单元格中显示“ Project 6”,单元格注释中提供了有关该项目的信息。
这就是我得到的。这给了我一个确定的值(-1),但我放置lookupvalue的位置似乎并不重要。它总是返回-1。
// My Script
function noteSetter() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var lookupvalue = SpreadsheetApp.getActiveSheet().getActiveCell().getValue();
var sheet = ss.getSheetByName("STATUS"); //source sheet
var sheet2 = ss.getSheetByName("FEBRUARI"); //result sheet
var cellnote = SpreadsheetApp.getActiveSheet().getActiveCell();
var lc = sheet.getLastColumn()
var lookup = sheet.getRange(1,1,1,lc).getValues() //
var index = lookup.indexOf(lookupvalue)
cellnote.setNote(index);
// This part will actually run the script once it's up and running
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Set cell note",
functionName : "noteSetter"
}];
sheet.addMenu("Scripts", entries);
};
}
答案 0 :(得分:0)
var lookup = sheet.getRange(1,1,1,lc).getValues();
var index = lookup.indexOf(lookupvalue)
第一行返回一个2D数组。 indexOf()仅适用于展平数组。尝试使用:
var lookup = sheet.getRange(1,1,1,lc).getValues()[0];
答案 1 :(得分:0)
According to Google preferably use getCurrentCell()
而不是getActiveCell()
,因为它返回当前突出显示(或选定)的单元格。
您的onOpen()
函数也应位于noteSetter()
函数之外,否则在电子表格打开时不会被调用。
以下代码将完成您想要的工作表。如果数据顺序被更改,则必须相应地更改范围公式。
/*
* This function will run when the Spreadsheet is opened and,
* will add a Menu item for the noteSetter function
*/
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Set cell note",
functionName : "noteSetter"
}];
sheet.addMenu("My Menu", entries);
};
function noteSetter() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("STATUS"); //source sheet
var sheet2 = ss.getSheetByName("FEBRUARI"); //result sheet
var noteCell = sheet2.getCurrentCell();
var lookUpValue = noteCell.getValue();
// Search through Col C in "STATUS" sheet to get the matching row
// You need to transpose the lookUpRange
var lookUpRange = sheet.getRange(2,3,sheet.getDataRange().getLastRow(),1).getValues();
lookUpRange = transpose(lookUpRange);
var index = lookUpRange[0].indexOf(lookUpValue); // Starts at 0
var row = index + 2; // One for the omitted header and one because rows start at 1
var note = sheet.getRange(row,7).getValue();
noteCell.setNote(note);
}
// You need to transpose to avoid looping through the array
function transpose(a)
{
return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); });
}