我正在Google网站上撰写Google Apps脚本,并尝试使用Google电子表格中2个不同标签上提供的数据。根据我认为从文档中理解的内容,我可以使用SpreadsheetApp
方法在站点脚本的openById()
类中使用所有可用的方法。
无论如何,这是我试图做的事情
function doGet(e) {
var doc = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE).getActiveSheet();
SpreadsheetApp.setActiveSheet(doc.getSheetId()[1]);
//....
}
我收到错误
无法找到方法setActiveSheet(。(第4行)
我将此工作从此链接中删除:Storing Data in Google Spreadsheets以及构建用户界面下列出的Ui服务部分。
有人看到我在这两行中做错了吗?
答案 0 :(得分:21)
setActiveSheet只能与UI显示的电子表格一起使用,您可以在浏览器中打开的电子表格中使用工作表。
使用SpreadsheetApp.openById,您打开一个电子表格来访问其数据,但它不会在您的浏览器中打开。它没有用户界面。
我在https://developers.google.com/apps-script/class_spreadsheetapp?hl=es-ES#openById中找到了这条评论:
// The code below opens a spreadsheet using it's ID and gets the name for it.
// Note that the spreadsheet is NOT physically opened on the client side.
// It is opened on the server only (for modification by the script).
var ss = SpreadsheetApp.openById("abc1234567");
某些示例假设您的脚本已在您的电子表格中运行。这不是你的情况,因为你正在运行一个脚本作为服务,它应该有自己的用户界面。
答案 1 :(得分:5)
我认为@ megabyte1024解决了语法错误,但回答你对@YoArgentina的评论:
您是否知道某种方法可以访问不同标签上的数据 通过不在电子表格内运行的服务?
这种帮助吗?
var ss = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE);
var sheets = ss.getSheets();
// the variable sheets is an array of Sheet objects
var sheet1A1 = sheets[0].getRange('A1').getValue();
var sheet2A1 = sheets[1].getRange('A1').getValue();
答案 2 :(得分:1)
这两行至少有一个问题。第一个是setActiveSheet方法参数是Sheet类对象,getSheetId方法返回一个整数值。顺便说一下,这个方法(getSheetId)是not documented。如果SpreadsheetApp没有活动的电子表格,则可能会出现第二个问题。在这种情况下,有“请先选择有效的电子表格”。错误。使用SpreadsheetApp.setActiveSpreadsheet方法设置有效的电子表格。
答案 3 :(得分:0)
您需要单独访问每个工作表。
var ss = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE);
var sheet = ss.getSheets()[0]; // "access data on different tabs"
ss.setActiveSheet(sheet);