在每个 sheet 中查找行,然后在匹配时跳转到单元格
Lookup rows in every sheet then on match, jump to cell
我正在尝试让脚本在 sheet 4 中搜索一个值,然后在 sheet 的其余部分中 sheet 的传播范围 "A2"在比赛中。它跳转到 sheet & 行
让我的代码循环遍历所有 sheet 并获取每个 sheet 中的最后一行。
但是,if 函数和跳转到匹配的单元格不起作用。
感谢我能得到的所有帮助 (:
第一次使用 google sheets...
function Lookup() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
//Get Sheet
var sheet = ss.getSheets()[3];
//set row & column
var GCell = sheet.getRange(2, 1);
// read values from set row & column
var CValue = GCell.getValues();
Logger.log(CValue[0][0]);
//Loop all sheets
var allsheets = ss.getSheets();
for (var s in allsheets){
var sheet=allsheets[s]
//Get last row in each sheet
var ShtID = sheet.getSheetId();
var lastRow = sheet.getLastRow();
//var range = sheet.getRange("B2");
//Logger.log(range.getRowIndex());
var SchCell;
for ( j = 1 ; j >= lastRow; j++){
if(SchCell[j][1] === CValue){
var Crow = SchCell.getRowIndex();
ShtID.setActiveCell(ShtID.getRange(Crow, 1));
Logger.log("Matched Row =" +Crow);
return;
}
}
Logger.log("Last Row" + lastRow);
}
}
- 您想将索引 3 的 sheet ("Sheet5") 的 "A2" 与列 "B" 最后一行的值进行比较,每个 sheet 除了 "Sheet5".
- 当"Sheet5"的"A2"的值与"B"列的最后一行相同时,要激活单元格
如上我明白你的意思了。如果我的理解是正确的,这个修改怎么样?我认为您的情况有几个答案。所以请将此视为其中之一。
修改点:
var ShtID = sheet.getSheetId()
没有 getRange()
和 setActiveCell
的方法,因为 sheet.getSheetId()
returns 是一个整数值。
SchCell
没有值。
- 在
for ( j = 1 ; j >= lastRow; j++){
,这个for循环没有循环。
修改后的脚本:
function Lookup() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
//Get Sheet
var sheet = ss.getSheets()[3];
//set row & column
var GCell = sheet.getRange(2, 1);
// read values from set row & column
var CValue = GCell.getValues();
Logger.log(CValue[0][0]);
// Modified part
var allsheets = ss.getSheets();
for (var s = 0; s < allsheets.length; s++) {
var sheet = allsheets[s];
if (s != 3) {
var values = sheet.getRange("B1:B").getValues().filter(String); // Retrieve values of column B
if (values.length > 0) {
var v = values[values.length - 1][0]; // Value of last row of column B
var lastRow = "B" + values.length; // Last row of column B
if (v == CValue[0][0]) {
sheet.getRange(lastRow).activate();
return true;
}
}
}
};
}
注:
- 在这个修改后的脚本中,当找到与"Sheet5"的"A2"相同的值时,第一个sheet的单元格被激活并获得焦点。
- 在当前阶段,每个sheet的几个细胞不能同时激活和聚焦。
参考文献:
编辑:
- 当找到与 "Sheet5" 的 "A2" 匹配的单元格时,您想要激活第一个 sheet 中第 "B" 列的所有单元格。
如果我的理解是正确的,这个怎么样?请修改修改部分为如下脚本。
// Modified part
var allsheets = ss.getSheets();
for (var s = 0; s < allsheets.length; s++) {
var sheet = allsheets[s];
if (s != 3) {
var values = sheet.getRange("B1:B").getValues().filter(String);
if (values.length > 0) {
var ranges = values.reduce(function(ar, e, i) {
if (e[0] == CValue[0][0]) {
ar.push("B" + (i + 1));
}
return ar;
}, []);
if (ranges.length > 0) {
Logger.log(ranges)
sheet.setActiveRangeList(sheet.getRangeList(ranges));
break;
}
}
}
};
我正在尝试让脚本在 sheet 4 中搜索一个值,然后在 sheet 的其余部分中 sheet 的传播范围 "A2"在比赛中。它跳转到 sheet & 行
让我的代码循环遍历所有 sheet 并获取每个 sheet 中的最后一行。 但是,if 函数和跳转到匹配的单元格不起作用。
感谢我能得到的所有帮助 (:
第一次使用 google sheets...
function Lookup() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
//Get Sheet
var sheet = ss.getSheets()[3];
//set row & column
var GCell = sheet.getRange(2, 1);
// read values from set row & column
var CValue = GCell.getValues();
Logger.log(CValue[0][0]);
//Loop all sheets
var allsheets = ss.getSheets();
for (var s in allsheets){
var sheet=allsheets[s]
//Get last row in each sheet
var ShtID = sheet.getSheetId();
var lastRow = sheet.getLastRow();
//var range = sheet.getRange("B2");
//Logger.log(range.getRowIndex());
var SchCell;
for ( j = 1 ; j >= lastRow; j++){
if(SchCell[j][1] === CValue){
var Crow = SchCell.getRowIndex();
ShtID.setActiveCell(ShtID.getRange(Crow, 1));
Logger.log("Matched Row =" +Crow);
return;
}
}
Logger.log("Last Row" + lastRow);
}
}
- 您想将索引 3 的 sheet ("Sheet5") 的 "A2" 与列 "B" 最后一行的值进行比较,每个 sheet 除了 "Sheet5".
- 当"Sheet5"的"A2"的值与"B"列的最后一行相同时,要激活单元格
如上我明白你的意思了。如果我的理解是正确的,这个修改怎么样?我认为您的情况有几个答案。所以请将此视为其中之一。
修改点:
var ShtID = sheet.getSheetId()
没有getRange()
和setActiveCell
的方法,因为sheet.getSheetId()
returns 是一个整数值。SchCell
没有值。- 在
for ( j = 1 ; j >= lastRow; j++){
,这个for循环没有循环。
修改后的脚本:
function Lookup() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
//Get Sheet
var sheet = ss.getSheets()[3];
//set row & column
var GCell = sheet.getRange(2, 1);
// read values from set row & column
var CValue = GCell.getValues();
Logger.log(CValue[0][0]);
// Modified part
var allsheets = ss.getSheets();
for (var s = 0; s < allsheets.length; s++) {
var sheet = allsheets[s];
if (s != 3) {
var values = sheet.getRange("B1:B").getValues().filter(String); // Retrieve values of column B
if (values.length > 0) {
var v = values[values.length - 1][0]; // Value of last row of column B
var lastRow = "B" + values.length; // Last row of column B
if (v == CValue[0][0]) {
sheet.getRange(lastRow).activate();
return true;
}
}
}
};
}
注:
- 在这个修改后的脚本中,当找到与"Sheet5"的"A2"相同的值时,第一个sheet的单元格被激活并获得焦点。
- 在当前阶段,每个sheet的几个细胞不能同时激活和聚焦。
参考文献:
编辑:
- 当找到与 "Sheet5" 的 "A2" 匹配的单元格时,您想要激活第一个 sheet 中第 "B" 列的所有单元格。
如果我的理解是正确的,这个怎么样?请修改修改部分为如下脚本。
// Modified part
var allsheets = ss.getSheets();
for (var s = 0; s < allsheets.length; s++) {
var sheet = allsheets[s];
if (s != 3) {
var values = sheet.getRange("B1:B").getValues().filter(String);
if (values.length > 0) {
var ranges = values.reduce(function(ar, e, i) {
if (e[0] == CValue[0][0]) {
ar.push("B" + (i + 1));
}
return ar;
}, []);
if (ranges.length > 0) {
Logger.log(ranges)
sheet.setActiveRangeList(sheet.getRangeList(ranges));
break;
}
}
}
};