我尝试编写一个函数来更改不是主表的表上的某些值。我已经尝试过openById
和openByUrl
,但都不能正常工作(第一行注释是我尝试过的另一个解决方案):
function setRandomCode() {
//var sheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1BOidZnEgdZhtkB8pAlYMBL6X-Ax3y46jVtli-LPhg0Y/edit#gid=524085816');
var sheet = SpreadsheetApp.openById('524085816')
var range = sheet.getRange('C3:F3');
for (var x = 1; x <= range.getWidth(); x++) {
var codeValue = Math.round(Math.random()*5, 1);
var beadColour;
switch (codeValue)
{
case 0:
beadColour = "Blue";
break;
case 1:
beadColour = "Green";
break;
case 2:
beadColour = "Red";
break;
case 3:
beadColour = "Magenta";
break;
case 4:
beadColour = "Cyan";
break;
case 5:
beadColour = "Yellow";
break;
}
range.getCell(1, x).setValue(beadColour);
}
}
当我尝试openById时,它将返回“错误值”错误。我已经从URL中获取了我认为是工作表的ID。
当我尝试openByUrl时,它会正确执行该功能,但在主工作表上而不是我要更改的工作表上。
有一个简单的解决方法吗?
答案 0 :(得分:2)
使用通过URL var sheet = SpreadsheetApp.openByUrl(URL);
打开
您将整个电子表格及其工作表作为对象。
如果要在特定工作表上使用.getRange();
,则可以使用sheet.getSheetByName('Sheet 1');
首先获取工作表,然后在该对象上调用.getRange();
。
SpreadsheetApp.openById('524085816')
您在此处提供的此ID是电子表格中单个工作表的工作表ID。您需要在此调用中提供实际的电子表格ID,以您的情况为准;
SpreadsheetApp.openById('1BOidZnEgdZhtkB8pAlYMBL6X-Ax3y46jVtli-LPhg0Y');
电子表格ID是URL中/d/
和/edit
之间的URL部分
您可以根据需要通过修改ID和工作表名称来尝试以下代码。
function setRandomCode() {
var ss = SpreadsheetApp.openById('1BOidZnEgdZhtkB8pAlYMBL6X-Ax3y46jVtli-LPhg0Y');
var sheet = ss.getSheetByName('Sheet 1');
var range = sheet.getRange('C3:F3');
for (var x = 1; x <= range.getWidth(); x++) {
var codeValue = Math.round(Math.random() * 5, 1);
var beadColour;
switch (codeValue) {
case 0:
beadColour = "Blue";
break;
case 1:
beadColour = "Green";
break;
case 2:
beadColour = "Red";
break;
case 3:
beadColour = "Magenta";
break;
case 4:
beadColour = "Cyan";
break;
case 5:
beadColour = "Yellow";
break;
}
range.getCell(1, x).setValue(beadColour);
}
}
答案 1 :(得分:1)
电子表格ID通常包含44个字符-数字和字母。它是网址的一部分,从https://docs.google.com/spreadsheets/d/
开始,到/edit
当我尝试openByUrl时,它会正确执行该功能,但在主工作表上而不是我要更改的工作表上。
SpreadsheetApp.openById
和SpreadsheetApp.openByUrl
open a spreadsheet,而不是工作表。getSheetByName(name)
示例:
var sheet = SpreadsheetApp.openByUrl('PASTE HERE THE URL').getSheetByName('PASTE HERE THE NAME OF THE SHEET');