Search 使用Google脚本在电子表格中的任何表格上查找值
使用下面的代码,我可以查看电子表格中的多个表格,找到与所选单元格相等的第一个值。该位唯一的问题是:具有找到的值的单元格高亮显示为黄色,但未选择具有找到的值的单元格。请参阅下面的代码,了解如何在图纸中跳转。我无法理解这一点:) 有趣的是,当我没有在工作表列表中跳转时,高亮显示和选择值的代码确实起作用,请参见最佳答案:Search 使用Google脚本在电子表格中的任何表格上查找值,search,google-apps-script,find,spreadsheet,Search,Google Apps Script,Find,Spreadsheet,使用下面的代码,我可以查看电子表格中的多个表格,找到与所选单元格相等的第一个值。该位唯一的问题是:具有找到的值的单元格高亮显示为黄色,但未选择具有找到的值的单元格。请参阅下面的代码,了解如何在图纸中跳转。我无法理解这一点:) 有趣的是,当我没有在工作表列表中跳转时,高亮显示和选择值的代码确实起作用,请参见最佳答案: 函数SearchAndFind(){ //确定所选单元格的值 var sh=SpreadsheetApp.getActiveSpreadsheet(); var ss=sh.getA
函数SearchAndFind(){
//确定所选单元格的值
var sh=SpreadsheetApp.getActiveSpreadsheet();
var ss=sh.getActiveSheet();
var cell=ss.getActiveCell();
var value=cell.getValue();
//使用活动电子表格中的图纸创建阵列
var sheets=SpreadsheetApp.getActiveSpreadsheet().getSheets();
//在表格中循环查找值
用于(表中的var i){
//将每张图纸上的“活动单元格”设置为A1,以便从此处开始查看
电子表格app.setActiveSheet(表格[i])
var sheet=sh.getActiveSheet();
var范围=表1.getRange(“A1”);
表.setActiveRange(范围);
//将变量设置为循环遍历每张图纸上的数据
var activeR=cell.getRow()-1;
var activeC=cell.getColumn()-1;
var data=sheets[i].getDataRange().getValues()
var步长=0
//循环浏览工作表上的数据
对于(var r=activeR;r此代码能够跨多个工作表进行搜索,它显然基于您发布的代码,但在从一个工作表更改到下一个工作表时使用内存(scriptProperties)保持搜索值“活动”,并知道何时搜索它。
它有两个非最佳方面:1°在开始新的搜索之前,您必须一直搜索到最后一次出现。
2°:当它从活页n切换到活页n+1时,它首先选择单元格A1,然后再查找出现的值
我想应该可以解决这些问题,但现在我不知道如何解决:-)
也许这个方法不是最好的,我从一个简单的单页脚本开始修改和复杂化…这通常不是最好的开发策略(我知道),但无论如何,这是一个有趣的实验和一个很好的逻辑练习。。。
谢谢你
function SearchAndFind() {
//determine value of selected cell
var sh = SpreadsheetApp.getActiveSpreadsheet();
var ss = sh.getActiveSheet();
var cell = ss.getActiveCell();
var value = cell.getValue();
if(ScriptProperties.getProperty('valueToFind')!=''){value = ScriptProperties.getProperty('valueToFind')};
//create array with sheets in active spreadsheet
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets()
var sheetNumber = sheets.length;
var currentSheet = ss.getIndex()-1;
Logger.log(currentSheet);
//loop through sheets to look for value
for (var i = currentSheet ; i<sheetNumber ; ++i ){
Logger.log('currentSheet = '+i)
//Set active cell to A1 on each sheet to start looking from there
SpreadsheetApp.setActiveSheet(sheets[i])
// sheets[i].getRange(1,1).activate();
//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 sheet
for(var r=activeR;r<data.length;++r){
for(var c=activeC;c<data[0].length;++c){
step++
Logger.log('sheet : '+i+' step:'+step+' value '+value+' = '+data[r][c]);
if(data[r][c]==''||(step==1&&i==currentSheet)){ continue };
if(value.toString().toLowerCase()==data[r][c].toString().toLowerCase()){
sheets[i].getRange(r+1,c+1).activate().setBackground('#ffff55');
ScriptProperties.setProperty('valueToFind',value);
return;
}
}
}
cell = sheets[i].getRange(1,1);
}
ScriptProperties.setProperty('valueToFind','');
Logger.log('reset');
}
函数SearchAndFind(){
//确定所选单元格的值
var sh=SpreadsheetApp.getActiveSpreadsheet();
var ss=sh.getActiveSheet();
var cell=ss.getActiveCell();
var value=cell.getValue();
if(ScriptProperties.getProperty('valueToFind')!=“”){value=ScriptProperties.getProperty('valueToFind')};
//使用活动电子表格中的图纸创建阵列
var sheets=SpreadsheetApp.getActiveSpreadsheet().getSheets()
var sheetNumber=sheets.length;
var currentSheet=ss.getIndex()-1;
Logger.log(当前表);
//在表格中循环查找值
对于(var i=currentSheet;i您是否考虑过这样一个事实,即您的代码只在大于活动行/列的行和列中查找搜索项。例如,如果B3中有“Test”一词,而另一个工作表的A1中有相同的“Test”一词,则找不到它,因此不会发生高亮显示和移动光标的情况,也不会删除eve设置活动内容的rything。它不必要而且速度慢得多。您不需要更改活动工作表或范围来读取或写入它。@ZigMandel您是对的,但这是我在更“复杂”方面缺乏的经验coding@Srik您是对的,但是我的代码在开始循环遍历每张工作表上的数据之前不是已经“修复”了这个问题吗?谢谢您的支持答案是肯定的。我下个星期会玩一玩!
function SearchAndFind() {
//determine value of selected cell
var sh = SpreadsheetApp.getActiveSpreadsheet();
var ss = sh.getActiveSheet();
var cell = ss.getActiveCell();
var value = cell.getValue();
if(ScriptProperties.getProperty('valueToFind')!=''){value = ScriptProperties.getProperty('valueToFind')};
//create array with sheets in active spreadsheet
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets()
var sheetNumber = sheets.length;
var currentSheet = ss.getIndex()-1;
Logger.log(currentSheet);
//loop through sheets to look for value
for (var i = currentSheet ; i<sheetNumber ; ++i ){
Logger.log('currentSheet = '+i)
//Set active cell to A1 on each sheet to start looking from there
SpreadsheetApp.setActiveSheet(sheets[i])
// sheets[i].getRange(1,1).activate();
//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 sheet
for(var r=activeR;r<data.length;++r){
for(var c=activeC;c<data[0].length;++c){
step++
Logger.log('sheet : '+i+' step:'+step+' value '+value+' = '+data[r][c]);
if(data[r][c]==''||(step==1&&i==currentSheet)){ continue };
if(value.toString().toLowerCase()==data[r][c].toString().toLowerCase()){
sheets[i].getRange(r+1,c+1).activate().setBackground('#ffff55');
ScriptProperties.setProperty('valueToFind',value);
return;
}
}
}
cell = sheets[i].getRange(1,1);
}
ScriptProperties.setProperty('valueToFind','');
Logger.log('reset');
}