使用电子表格的工作表名称填充行
Populate rows with the sheets names of an spreadsheet
我有一个传播sheet,其中包含多个 sheet 和一些食谱。我手动将 sheet 的标题存储在第一个 sheet 中,以引用另一个传播 sheet 上的食谱标题,但这不能很好地扩展,所以我想自动化过程。我相信我不能用任何内置函数来做到这一点,所以我正在尝试构建一个自定义函数来做到这一点。
我已经知道一些编码,但是我在 google API 方面的经验非常有限。我当前的尝试返回以下异常:“您无权调用设置值”。在 google 这个错误之后,我发现自定义函数似乎无法为另一个单元格设置值,所以我来这里是为了寻找一种替代这种微不足道的行为的方法。
这是我当前的代码:
function updateSheetTitles() {
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var cell = SpreadsheetApp.getActiveSpreadsheet().getCurrentCell();
var row = cell.getRow();
var column = cell.getColumn();
for (var i=0 ; i<sheets.length ; i++){
if(i<1) //For passing trought the first sheet
return;
cell.setValue(sheets[i].getSheetName);
var range = SpreadsheetApp.getActiveSheet().getRange(row+1, column, 1, 1);
cell = SpreadsheetApp.getActiveSheet().setCurrentCell(range);
}
}
这里有一张图片来说明我想要什么:
这可能是一项简单的任务,但我未能找到构建它的方法,所以任何实现它的想法都将不胜感激。
我相信你的目标如下。
- 您想在活动 Google Spreadsheet.
中检索 sheet 个名字
- 您想将 sheet 个名称放入活动单元格。
- 您想使用自定义函数实现此目的。
修改点:
- 很遗憾,
setValue
不能在自定义函数中使用。我认为你的问题的原因是由于这个。
- 在您的脚本中,
cell.setValue(sheets[i].getSheetName);
处 getSheetName
的方法不是 运行。如果您想使用此方法,请添加 ()
like getSheetName()
.
SpreadsheetApp.getActiveSpreadsheet()
可申报1次
为了实现您的目标,我想提出一个自定义函数来创建一个包含 sheet 名称的数组并返回该数组。
以上几点反映到示例脚本中,就变成了下面的样子。
修改后的脚本:
请将以下脚本复制并粘贴到Google Spreadsheet的脚本编辑器中。并且,请将 =updateSheetTitles()
的自定义函数放在一个单元格中。至此,sheet个名字返回到行方向。
function updateSheetTitles() {
return SpreadsheetApp.getActiveSpreadsheet().getSheets().map(e => [e.getSheetName()]);
}
从你的回复来看,当你想检索除第一个和第二个sheet之外的sheet个名字时,你也可以使用下面的脚本。
function updateSheetTitles() {
return SpreadsheetApp.getActiveSpreadsheet().getSheets().map(e => [e.getSheetName()]).slice(2);
}
参考文献:
我有一个传播sheet,其中包含多个 sheet 和一些食谱。我手动将 sheet 的标题存储在第一个 sheet 中,以引用另一个传播 sheet 上的食谱标题,但这不能很好地扩展,所以我想自动化过程。我相信我不能用任何内置函数来做到这一点,所以我正在尝试构建一个自定义函数来做到这一点。
我已经知道一些编码,但是我在 google API 方面的经验非常有限。我当前的尝试返回以下异常:“您无权调用设置值”。在 google 这个错误之后,我发现自定义函数似乎无法为另一个单元格设置值,所以我来这里是为了寻找一种替代这种微不足道的行为的方法。
这是我当前的代码:
function updateSheetTitles() {
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var cell = SpreadsheetApp.getActiveSpreadsheet().getCurrentCell();
var row = cell.getRow();
var column = cell.getColumn();
for (var i=0 ; i<sheets.length ; i++){
if(i<1) //For passing trought the first sheet
return;
cell.setValue(sheets[i].getSheetName);
var range = SpreadsheetApp.getActiveSheet().getRange(row+1, column, 1, 1);
cell = SpreadsheetApp.getActiveSheet().setCurrentCell(range);
}
}
这里有一张图片来说明我想要什么:
这可能是一项简单的任务,但我未能找到构建它的方法,所以任何实现它的想法都将不胜感激。
我相信你的目标如下。
- 您想在活动 Google Spreadsheet. 中检索 sheet 个名字
- 您想将 sheet 个名称放入活动单元格。
- 您想使用自定义函数实现此目的。
修改点:
- 很遗憾,
setValue
不能在自定义函数中使用。我认为你的问题的原因是由于这个。 - 在您的脚本中,
cell.setValue(sheets[i].getSheetName);
处getSheetName
的方法不是 运行。如果您想使用此方法,请添加()
likegetSheetName()
. SpreadsheetApp.getActiveSpreadsheet()
可申报1次
为了实现您的目标,我想提出一个自定义函数来创建一个包含 sheet 名称的数组并返回该数组。
以上几点反映到示例脚本中,就变成了下面的样子。
修改后的脚本:
请将以下脚本复制并粘贴到Google Spreadsheet的脚本编辑器中。并且,请将 =updateSheetTitles()
的自定义函数放在一个单元格中。至此,sheet个名字返回到行方向。
function updateSheetTitles() {
return SpreadsheetApp.getActiveSpreadsheet().getSheets().map(e => [e.getSheetName()]);
}
从你的回复来看,当你想检索除第一个和第二个sheet之外的sheet个名字时,你也可以使用下面的脚本。
function updateSheetTitles() { return SpreadsheetApp.getActiveSpreadsheet().getSheets().map(e => [e.getSheetName()]).slice(2); }