Google表格 - 在上一页中的同一单元格中获取价值

时间:2014-11-24 01:44:36

标签: google-sheets

我正在创建一个锻炼电子表格来跟踪我每周的表现,每张表都涵盖了一周的锻炼。每张纸(除了第一张之外)都是它之前的纸张的副本,并且有一些我希望从前一张纸上带来的值;例如,前一周演习的代表人数。

我已阅读了一些API,但似乎无法找到一个函数来选择调用函数的当前工作表。如果它存在,我可以得到索引并从中减去以获得前一个工作表,然后从给定的行和列中获取一个值。但是,我能找到的最接近的是访问“活动”表 - 这似乎是使用setActiveSheet()函数设置的。但是我不知道如何在一个用于多个不同单元格的脚本中使用它。

我在这里遗漏了什么,或者是否有更好的方法来获取有关当前所选工作表的信息?您可以提供的任何帮助都非常有用。谢谢!

[编辑]我的电子表格位于:https://docs.google.com/spreadsheets/d/1b8rDYxbb_6ltI0GvKcmKyz1Y3IV3BSrgWp8Mf2l18cc/edit?usp=sharing

此外,我将发布以下脚本。

4 个答案:

答案 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;
&#13;
&#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列的单元格。“