我有一个Google Apps脚本,可以将电子表格从一个团队驱动器复制到另一个团队驱动器,然后发布新的电子表格。我想获取特定工作表的发布URL或获取工作表的JSON URL。
这是我到目前为止的工作代码:
var dFolderID = "destination folder ID";
var sFileID = "source spreadsheet ID";
// get the destination folder
var dFolder = DriveApp.getFolderById(dFolderID);
// get the source file
var sFile = DriveApp.getFileById(sFileID);
// name of the new file
var nFileName = "test - " + Utilities.formatDate(new Date(), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "yyyyMMddHHmmss");
// make a copy of the spreadsheet
var nFile = sFile.makeCopy(nFileName, dFolder);
// get the ID of the new spreadsheet
var nFileID = nFile.getId();
// publish it
var publishResponse = Drive.Revisions.update({
published: true,
publishedOutsideDomain: false,
publishAuto: true
}, nFileID, 1);
至此,新的电子表格已创建,我知道电子表格的ID /密钥,并且已发布。
据我所知,由于publishResponse.publishedLink
已贬值,因此无法获取已发布的URL。
所以我想我可以使用此URL来获取工作表的JSON:
https://spreadsheets.google.com/feeds/list/SPREADSHEET_ID/WORKSHEET_ID/public/values?alt=json
但是要使它起作用,我必须知道WORKSHEET_ID
。我知道我可以使用工作表索引(例如1、2、3等),但是如果工作表顺序更改,那将中断。
据我所知,获取WORKSHEET_ID
的唯一方法是检查以下URL:
https://spreadsheets.google.com/feeds/worksheets/SPREADSHEET_ID/private/full
如果我在浏览器中加载此URL,则会收到XML响应,并且可以在其中看到WORKSHEET_ID
。但是,如果我尝试从我的Google Apps脚本加载此URL,它将无法正常工作。看来它重定向到了Google的登录页面。
var privateFullUrl = Utilities.formatString("http://spreadsheets.google.com/feeds/worksheets/%s/public/full", nFileID);
var privateFullData = UrlFetchApp.fetch(privateFullUrl, {
contentType : 'application/xml; charset=utf-8'
});
Logger.log(privateFullData.getContentText());
我还检查了SpreadsheetApp.openById(nFileID).getSheetByName("..").getSheetId()
和SpreadsheetApp.openById(nFileID).getSheetByName("..").getRange(1,1).getDataSourceUrl()
,但它们都返回了一个数字工作表ID,而不是我为https://spreadsheets.google.com/feeds/list/SPREADSHEET_ID/WORKSHEET_ID/public/values?alt=json
所需要的字母数字。
是否有获取特定工作表的已发布URL或JSON URL的信息?
修改
我忘了提到这是Enterprise G-Suite,并且公司域外的共享被阻止了。
答案 0 :(得分:1)
要访问私人网址,您需要oauth
授权。您可以发送带有ScriptApp.getOAuthToken()
提供的承载令牌的授权标头,以绕过完整的oauth流。
UrlFetchApp.fetch(url, {headers: {Authorization: 'Bearer ' + ScriptApp.getOAuthToken()}})
要从工作表中获取JSON,还可以使用Google visualization api:
UrlFetchApp.fetch("https://docs.google.com/spreadsheets/d/[SPREADSHEET_ID]/gviz/tq?gid=0&tqx=out:json",
{headers: {Authorization: 'Bearer ' + ScriptApp.getOAuthToken()}});
或
UrlFetchApp.fetch("https://docs.google.com/spreadsheets/d/[SPREADSHEET_ID]/gviz/tq?gid=0&tqx=out:json&access_token="+ ScriptApp.getOAuthToken())
答案 1 :(得分:0)
我不确定公共/私人情况会如何变化,但是您可以打开任何Google文档,包括ID为以下电子表格:
https://drive.google.com/open?id=XXXXX
您需要做什么吗?