我正在尝试创建一个Google脚本来访问Google Docs电子表格中的一系列单元格,这些单元格不是我自己的,而是共享的。电子表格的共享方式意味着它是公开可读的,但无法写入。 (普通用户可以评论,但不能编辑)
当我尝试运行此脚本时,出现错误:“您无权访问所请求的文档。”我已将Google Scripts授权给我的帐户,但这似乎不足以进行getValues()调用。
到目前为止,这是我的脚本:
function myFunction() {
var spreadsheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1g24uo61ITTveZrUGx4ZY5nMoJp-n1NCxq5r4WMhAJU0/");
// I can access the name, this runs fine:
Logger.log(spreadsheet.getName());
SpreadsheetApp.setActiveSpreadsheet(spreadsheet);
SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);
// fetch this sheet
sheet = spreadsheet.getActiveSheet();
var range = sheet.getRange(3,3,22,1);
// This next line fails:
var slicesAndCounts = range.getValues();
Logger.log(slicesAndCounts);
}
(网址是实际的公开电子表格,因此此代码应按原样运行)
我是否可以通过某种方式访问Google脚本中的电子表格中的值?我曾经考虑过制作电子表格的私人副本,但我只需要在脚本的持续时间内使用它,我不确定我是否可以轻松创建临时副本。该解决方案似乎也有点沉重,考虑到我应能够阅读电子表格,因为我可以通过浏览器或Google表格应用程序访问它。
答案 0 :(得分:2)
如何使用Sheets API?在SpreadsheetApp,似乎用户无法从共享电子表格中检索值。我认为原因可能是访问令牌无法在SpreadsheetApp中使用。在我的环境中,也会出现相同的错误。所以我想建议使用Sheets API。使用Sheets API时,还会使用访问令牌。这样,用户就可以从共享电子表格中检索值。
要使用此示例脚本,请在Advanced Google Services和API控制台上启用Sheets API。
如果您现在使用使用Sheets API的脚本打开脚本编辑器,则可以通过访问此URL https://console.cloud.google.com/apis/library/sheets.googleapis.com/
为项目启用Sheets API此示例的结果与脚本的结果相同。这些值是从共享电子表格中第一张工作表的3,3,22,1
范围中检索的。
1g24uo61ITTveZrUGx4ZY5nMoJp-n1NCxq5r4WMhAJU0
为https://docs.google.com/spreadsheets/d/1g24uo61ITTveZrUGx4ZY5nMoJp-n1NCxq5r4WMhAJU0/
。getRange(3,3,22,1)
为C3:C24
。
{ranges: "C3:C24"}
时,它表示电子表格的第一张表。如果您想从超过第二张表中检索值,请使用表格sheet2!C3:C24
和sheet3!C3:C24
。function myFunction() {
var spreadsheetId = "1g24uo61ITTveZrUGx4ZY5nMoJp-n1NCxq5r4WMhAJU0";
var slicesAndCounts = Sheets.Spreadsheets.Values.batchGet(spreadsheetId, {ranges: "C3:C24"}).valueRanges[0].values;
Logger.log(slicesAndCounts);
}
如果这对你没用,我很抱歉。