我在工作表‘价格历史’单元格E21中有一个公式,它也会根据其他单元格的大小自动更改为不同的工作表名称。我拥有的脚本是返回TypeError: newSheetName.getRange不是一个函数。在下面的脚本中,我试图复制E21上方的空白单元格,并将该单元格粘贴到指定工作表上的空白单元格中,但这没有帮助。我试图只激活值在E21中的工作表。谢谢
function MyAccount() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Price History");
var newSheetName = sheet.getRange("E21").getValue();
sheet.getRange("E20").copyTo(newSheetName.getRange("C1"), { contentsOnly: true });
}
发布于 2021-11-11 07:44:23
var newSheetName = sheet.getRange("E21").getValue();
不将变量newSheetName
设置为工作表,而是将其设置为字符串值。建议:
由于您已经提到单元格E21
的值基本上包含随机更改的工作表名称,也许您仍然可以尝试使用getRangeByName(姓名)方法,因为这将返回带有给定名称的工作表&然后您可以得到该工作表的范围。请参阅下面的示例微调脚本:
更新
function MyAccount() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Price History");
var newSheetName = ss.getSheetByName(sheet.getRange("E21").getValue());
var Direction=SpreadsheetApp.Direction;
var lastRowOfC = ss.getRange("C"+(ss.getLastRow()+1)).getNextDataCell(Direction.UP).getRow() + 1; //Get the last row of column C on any worksheet
sheet.getRange("E20").copyTo(newSheetName.getRange(lastRowOfC,3), { contentsOnly: true });
}
获取最后一行脚本是从确定单个列中的最后一行 (获取包含空空白的列的最后一行)的答案之一派生出来的。
我这边的样本测试:
注意事项:如果您可以共享您正在使用的示例表,以防止我误解您的设置,也会更好。
更新
运行脚本后,测试单元格值被复制到C列最后一行(即
NewTestSheet
C4
)最后一行名为的目标表中
发布于 2021-11-11 08:39:57
您正在尝试使用字符串值作为工作表。相反,使用工作表名获取新工作表,然后复制到新范围。
function MyAccount() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Price History");
var copyRange = sheet.getRange("E20");
var nameRange = sheet.getRange("E21");
copyRange.copyTo(ss.getSheetByName(nameRange.getValue()).getRange("C1"), { contentsOnly: true });
}
或,
function MyAccount() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Price History");
var copyValue = sheet.getRange("E20").getValue();
var nameRange = sheet.getRange("E21");
ss.getSheetByName(nameRange.getValue()).getRange("C1").setValue(copyValue);
}
https://stackoverflow.com/questions/69929233
复制