Google 脚本 - 无法在创建表单后找到目标 Sheet
Google Scripts - Can't Find Destination Sheet After Form Creation
我的脚本以编程方式创建一个 Google 表单并将目标设置为当前 Spreadsheet:
var sheetId = SpreadsheetApp.getActiveSpreadsheet().getId();
var form = FormApp.create(acctName).setTitle(acctName).setDestination(FormApp.DestinationType.SPREADSHEET, sheetId);
// several form items added here
接下来,我想重命名目标 Sheet 并进行一些格式编辑。但是,当我这样做时,sheet 似乎不存在。例如,getSheets()
不包含新的 Sheet! (是的,理想情况下我想通过 ID 打开 sheet;请参阅下面的函数,它也不起作用。)
var sheets = SpreadsheetApp.openById(form.getDestinationId()).getSheets();
SpreadsheetApp.setActiveSheet(sheets[0]);
上面的代码打开了我认为是索引 1 而不是索引 0 的内容,因为 sheet 没有编入索引。我什至尝试创建几秒钟的延迟(希望允许客户端和服务器之间发生同步只是时间问题)但没有成功。
我也尝试过类似下面的方法,正如 Stack Overflow 上其他地方所建议的那样,但目标 Sheet 不会出现在 getSheets()
中,即使通过单独的函数调用也是如此:
function getFormDestinationSheetId(form) {
var destinationId = form.getDestinationId();
if(destinationId) {
var spreadsheet = SpreadsheetApp.openById(destinationId);
spreadsheet.getSheets().forEach(
function(sheet) {
var sheetFormUrl = sheet.getFormUrl();
if(sheetFormUrl) {
var sheetForm = FormApp.openByUrl(sheetFormUrl);
if(sheetForm.getId() == form.getId()) {
return sheet.getSheetId();
}
}
}
);
}
return null;
}
我没能在网上找到有类似问题的人。任何意见,将不胜感激。谢谢!
欢迎来到 Stack!
我假设您的脚本绑定到 sheet?由于浏览器缓存,您可能看不到新的 sheet,具体取决于您调用脚本的方式。
function myFunction() {
var sheet = SpreadsheetApp.getActive();
var sheetId = sheet.getId();
var form = FormApp.create('acctName').setTitle('acctName').setDestination(FormApp.DestinationType.SPREADSHEET, sheetId);
var ssSheets = sheet.getSheets();
var respSheet = ssSheets[0]
respSheet.getRange('A1').setBackground('RED');
respSheet.getRange('C1').setFormula('=COUNTA($C:$C)');
respSheet.setColumnWidth(2, 100);
SpreadsheetApp.flush();
}
我的脚本以编程方式创建一个 Google 表单并将目标设置为当前 Spreadsheet:
var sheetId = SpreadsheetApp.getActiveSpreadsheet().getId();
var form = FormApp.create(acctName).setTitle(acctName).setDestination(FormApp.DestinationType.SPREADSHEET, sheetId);
// several form items added here
接下来,我想重命名目标 Sheet 并进行一些格式编辑。但是,当我这样做时,sheet 似乎不存在。例如,getSheets()
不包含新的 Sheet! (是的,理想情况下我想通过 ID 打开 sheet;请参阅下面的函数,它也不起作用。)
var sheets = SpreadsheetApp.openById(form.getDestinationId()).getSheets();
SpreadsheetApp.setActiveSheet(sheets[0]);
上面的代码打开了我认为是索引 1 而不是索引 0 的内容,因为 sheet 没有编入索引。我什至尝试创建几秒钟的延迟(希望允许客户端和服务器之间发生同步只是时间问题)但没有成功。
我也尝试过类似下面的方法,正如 Stack Overflow 上其他地方所建议的那样,但目标 Sheet 不会出现在 getSheets()
中,即使通过单独的函数调用也是如此:
function getFormDestinationSheetId(form) {
var destinationId = form.getDestinationId();
if(destinationId) {
var spreadsheet = SpreadsheetApp.openById(destinationId);
spreadsheet.getSheets().forEach(
function(sheet) {
var sheetFormUrl = sheet.getFormUrl();
if(sheetFormUrl) {
var sheetForm = FormApp.openByUrl(sheetFormUrl);
if(sheetForm.getId() == form.getId()) {
return sheet.getSheetId();
}
}
}
);
}
return null;
}
我没能在网上找到有类似问题的人。任何意见,将不胜感激。谢谢!
欢迎来到 Stack!
我假设您的脚本绑定到 sheet?由于浏览器缓存,您可能看不到新的 sheet,具体取决于您调用脚本的方式。
function myFunction() {
var sheet = SpreadsheetApp.getActive();
var sheetId = sheet.getId();
var form = FormApp.create('acctName').setTitle('acctName').setDestination(FormApp.DestinationType.SPREADSHEET, sheetId);
var ssSheets = sheet.getSheets();
var respSheet = ssSheets[0]
respSheet.getRange('A1').setBackground('RED');
respSheet.getRange('C1').setFormula('=COUNTA($C:$C)');
respSheet.setColumnWidth(2, 100);
SpreadsheetApp.flush();
}