如何通过Google Apps脚本访问不同Google电子表格中的数据?

时间:2012-07-30 19:06:50

标签: google-apps-script

我正在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服务部分。

有人看到我在这两行中做错了吗?

4 个答案:

答案 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);