我正在创建一个锻炼电子表格来跟踪我每周的表现,每张表都涵盖了一周的锻炼。每张纸(除了第一张之外)都是它之前的纸张的副本,并且有一些我希望从前一张纸上带来的值;例如,前一周演习的代表人数。
我已阅读了一些API,但似乎无法找到一个函数来选择调用函数的当前工作表。如果它存在,我可以得到索引并从中减去以获得前一个工作表,然后从给定的行和列中获取一个值。但是,我能找到的最接近的是访问“活动”表 - 这似乎是使用setActiveSheet()函数设置的。但是我不知道如何在一个用于多个不同单元格的脚本中使用它。
我在这里遗漏了什么,或者是否有更好的方法来获取有关当前所选工作表的信息?您可以提供的任何帮助都非常有用。谢谢!
[编辑]我的电子表格位于:https://docs.google.com/spreadsheets/d/1b8rDYxbb_6ltI0GvKcmKyz1Y3IV3BSrgWp8Mf2l18cc/edit?usp=sharing
此外,我将发布以下脚本。
答案 0 :(得分:6)
获取当前工作表,您可以使用.getActiveSheet()然后使用.getIndex()。然后从那里减去。请注意,.getIndex()是1索引的。因此,第一个工作表将具有索引1.如果要将其与.getSheets()(零索引)结合使用,则必须执行-2才能转到上一个工作表。如果需要,您可能需要构建一些错误处理(如果您已经在第一张表上)。 E.g:
function previous() {
var ss = SpreadsheetApp.getActive();
var curSheet = ss.getActiveSheet();
var prevSheet = ss.getSheets()[curSheet.getIndex() - 2];
prevSheet ? Logger.log(prevSheet.getName()) : SpreadsheetApp.getUi()
.alert("Active Sheet is the first sheet !");
}
答案 1 :(得分:3)
我不知道你是否还需要它们,但我制作了这个剧本(我父亲需要它)
function previousCell(cellLocation) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var curSheet = ss.getActiveSheet();
var curSheetIndex = curSheet.getIndex();
var preSheetIndex = curSheetIndex - 2;
var preSheet = ss.getSheets()[preSheetIndex];
var targetCell = preSheet.getRange(cellLocation);
var value = targetCell.getValue();
if (curSheetIndex == 1){
return "There is no previous sheet" ;
}
else
return value;
}
我刚刚将它作为Sheets附加组件提交,让我们看看它是否会很快出现
答案 2 :(得分:0)
如果仍然感兴趣,这是我的(通用解决方案):
/**
* Get name of a given sheet, based on index
* @param {number} index
* If positive: See relativeOffset; If negative: A previous sheet (-1 means the one preceeding), otherwise (default) : The current sheet
* @param {boolean} relativeOffset
* If TRUE, a positive index means relative to current sheet tab, otherwise (FALSE=default) absolute sheet index (first is 1)
* @return The name of the relevant sheet
* @customfunction
*/
function getSheetName(index,relativeOffset) {
var ss = SpreadsheetApp.getActive();
var curSheet = ss.getActiveSheet();
var curSheetIndex = curSheet.getIndex();
var getSheetIndex = curSheetIndex - 1;
if (index > 0 && !relativeOffset) {
getSheetIndex = index -1;
} else if (index > 0) {
getSheetIndex = getSheetIndex + index;
} else if (index < 0) {
getSheetIndex = curSheetIndex + index;
}
if (getSheetIndex < 0){
return false;
}
var getSheet = ss.getSheets()[getSheetIndex];
//For debugging:
//return ("curSheetIndex : " + curSheetIndex + " ; index : "+ index + " ; getSheetIndex : " + getSheetIndex + " ; " + getSheet.getName());
return getSheet.getName();
}
&#13;
答案 3 :(得分:0)
威廉的回答有效。但是,当将单元格位置作为字符串传递给函数参数(例如previousCell(&#34; B $ 1&#34;))时,拖动并复制单元格时,B $ 1将保持不变。为了解决这个问题,我创建了另一个具有相对列位置的函数,因此它将始终访问上一个工作表中的相同行和相对列:
function previousCell(relCol) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var curSheet = ss.getActiveSheet();
if (curSheet < 2)
return "There is no previous sheet";
var preSheet = ss.getSheets()[curSheet.getIndex() - 2];
var curCel = curSheet.getActiveCell();
return preSheet.getRange(curCel.getRow(), curCel.getColumn() + relCol).getValue();
}
因此它将函数调用为:previousCell(2),它将访问具有相同行和2列的单元格。“