这是一个sample电子表格,具有2张纸(Sheet1和Sheet2)。单元格值是 1)Sheet1的[[“ This”,“ is”,“ first”,“ sheet”],[“ Added row 2”,“”,“”,“”]] 2)Sheet2的[[“ This”,“ is”,“ second”,“ sheet”],[“ Added row 2”,“”,“”,“”]]
当我运行以下代码时,
var file_id = '1JqbuqOQS5NSFqfPlxJG-DY1HIW9xZl_ddjQa_F2pUv4';
var revisions = Drive.Revisions.list(file_id);
var revision = revisions.items[revisions.items.length-1];
var revUrl = Drive.Revisions.get(file_id, revision.id).exportLinks["text/csv"] + "&access_token=" + ScriptApp.getOAuthToken();
var revString = UrlFetchApp.fetch(revUrl).getContentText();
我只得到revString =“ This,is,first,sheet \ n已添加第2行,”
如何获取第二个图纸值?
答案 0 :(得分:0)
var revision = revisions.items[revisions.items.length-1]
。如果我的理解正确,那么这个答案如何?
很遗憾,无法从脚本的revUrl
中检索所有工作表的CSV数据。 exportLinks["text/csv"]
的默认端点指示电子表格的第一个标签。如果要检索其他工作表,则需要为每个工作表添加gid={sheetId}
的查询参数。
在当前阶段,无法使用Spreadsheet Service和Sheets API直接访问ceatain版本的Spreadsheet。因此,从修订数据中检索CSV数据时,如果已经删除了现有工作表和/或已经添加了新工作表,则无法检索所有工作表ID。
此变通办法假设条件是必须删除并添加电子表格中的工作表。
在此修改中,我使用了以下流程。
通过以上流程,可以检索具有特定修订版的所有工作表的CSV数据。
var file_id = '1JqbuqOQS5NSFqfPlxJG-DY1HIW9xZl_ddjQa_F2pUv4';
var revisions = Drive.Revisions.list(file_id);
var revision = revisions.items[revisions.items.length-1];
// I modified following script.
var revUrl = Drive.Revisions.get(file_id, revision.id).exportLinks["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"] + "&access_token=" + ScriptApp.getOAuthToken();
var blob = UrlFetchApp.fetch(revUrl).getBlob();
var tempSSId = Drive.Files.insert({mimeType: MimeType.GOOGLE_SHEETS}, blob).id;
var sheets = SpreadsheetApp.openById(tempSSId).getSheets();
for (var i = 0; i < sheets.length; i++) {
var csv = sheets[i].getDataRange().getValues().map(function(e) {return e.join(",")}).join("\n");
Logger.log(csv)
}
Drive.Files.remove(tempSSId);
此替代方法假设没有删除和添加电子表格中的工作表的情况。
在此修改中,我使用了以下流程。
通过以上流程,可以检索具有特定修订版的所有工作表的CSV数据。
var file_id = '1JqbuqOQS5NSFqfPlxJG-DY1HIW9xZl_ddjQa_F2pUv4';
var sheetIds = SpreadsheetApp.openById(file_id).getSheets().map(function(e) {return e.getSheetId()});
var token = ScriptApp.getOAuthToken();
var revisions = Drive.Revisions.list(file_id);
var revision = revisions.items[revisions.items.length-1];
var reqs = sheetIds.map(function(e) {
var revUrl = Drive.Revisions.get(file_id, revision.id).exportLinks["text/csv"] + "&access_token=" + token + "&gid=" + e;
return {url: revUrl, muteHttpExceptions: true};
});
var res = UrlFetchApp.fetchAll(reqs);
for (var i = 0; i < res.length; i++) {
if (res[i].getResponseCode() == 200 ) {
Logger.log(res[i].getContentText())
}
}
如果我误解了您的问题,而这不是您想要的结果,我深表歉意。