情况:
- 1 个电子表格
- 多张纸
- 已选择 1 个单元格(可能会有所不同)
我想要做的是在单击电子表格中类似按钮的图像时,在任何与所选单元格(不区分大小写)匹配的工作表中查找并将焦点设置到下一个单元格。有点像 MS Word 可以为您创建的自定义索引。
我的方法是: - 将所选单元格的值设置为变量(成功) - 找到与该变量匹配的第一个单元格(不是所选单元格)(不成功) - 将找到的单元格的值设置为变量 2(不成功) - 设置电子表格的焦点到变量2(没有成功)
function FindSetFocus()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var activecell = sheet.getActiveCell();
var valueactivecell = activecell.getValue();
//here comes the code :)
}
我在以下主题中找到了此代码段,但在设置输入和处理输出时遇到了一些问题:如何搜索 Google 电子表格?
我想我可以用'valueactivecell'替换'value',但我不知道如何设置范围以搜索电子表格中的所有工作表。另外,我希望输出是我可以将焦点设置为使用类似 'ss.setActiveSheet(sheet).setActiveSelection("D5");'
/**
* Finds a value within a given range.
* @param value The value to find.
* @param range The range to search in.
* @return A range pointing to the first cell containing the value,
* or null if not found.
*/
function find(value, range) {
var data = range.getValues();
for (var i = 0; i < data.length; i++) {
for (var j = 0; j < data[i].length; j++) {
if (data[i][j] == value) {
return range.getCell(i + 1, j + 1);
}
}
}
return null;
}
也发现了这一点,但没有运气让它在选定的单元格上工作并设置焦点:如何在 Google 电子表格最佳答案中搜索并找到一行的坐标,第一个代码。
请记住,我不是专业编码人员 :) 如果提供了代码示例,请在行内发表评论,呵呵。
提前感谢您的帮助。
24/10 编辑:使用下面答案中的代码并对其进行了一些编辑。现在可以查看电子表格中的多个工作表以查找值。此位的唯一问题是:我的单元格以黄色突出显示,但未选择具有找到值的单元格。请参阅下面的代码以浏览工作表。我无法理解这个:)
function SearchAndFind() {
//determine value of selected cell
var sh = SpreadsheetApp.getActiveSpreadsheet();
var ss = sh.getActiveSheet();
var cell = ss.getActiveCell();
var value = cell.getValue();
//create array with sheets in active spreadsheet
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
//loop through sheets to look for value
for (var i in sheets) {
//Set active cell to A1 on each sheet to start looking from there
SpreadsheetApp.setActiveSheet(sheets[i])
var sheet = sh.getActiveSheet();
var range = sheet.getRange("A1");
sheet.setActiveRange(range);
//set variables to loop through data on each sheet
var activeR = cell.getRow()-1;
var activeC = cell.getColumn()-1;
var data = sheets[i].getDataRange().getValues()
var step = 0
//loop through data on the sheet
for(var r=activeR;r<data.length;++r){
for(var c=activeC;c<data[0].length;++c){
step++
Logger.log(step+' -- '+value+' = '+data[r][c]);
if(data[r][c]==''||step==1){ continue };
if(value.toString().toLowerCase()==data[r][c].toString().toLowerCase()){
sheet.getRange(r+1,c+1).activate().setBackground('#ffff55');
return;
}
}
}
}
}