Google apps script 检索Google电子表格中特定修订版的所有图纸的值
这是一个包含两张表(表1和表2)的电子表格。单元格值为 1) [[“这”、“是”、“第一”、“工作表”]、[“添加了第2行”、“”、“”、“”、“”]]用于工作表1 2) [[“这”、“是”、“第二”、“工作表”]、[“添加了第2行”、“”、“”、“”、“”]]用于工作表2 当我运行以下代码时Google apps script 检索Google电子表格中特定修订版的所有图纸的值,google-apps-script,Google Apps Script,这是一个包含两张表(表1和表2)的电子表格。单元格值为 1) [[“这”、“是”、“第一”、“工作表”]、[“添加了第2行”、“”、“”、“”、“”]]用于工作表1 2) [[“这”、“是”、“第二”、“工作表”]、[“添加了第2行”、“”、“”、“”、“”]]用于工作表2 当我运行以下代码时 var file_id = '1JqbuqOQS5NSFqfPlxJG-DY1HIW9xZl_ddjQa_F2pUv4'; var revisions = Drive.Revisions.list(fil
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=“这是,首先,表\n添加了第2行,,,”
如何获取第二张图纸的值?- 您希望检索最新版本。
- 这来自
var revision=revisions.items[revisions.items.length-1]
- 您还希望从其他修订中检索CSV数据
- 这来自
- 您希望从所有图纸中检索特定修订版的CSV数据
- 你想使用谷歌应用程序脚本
revUrl
检索所有工作表中的CSV数据。exportLinks[“text/csv”]
的默认端点表示电子表格的第一个标记。如果要检索其他工作表,需要为每个工作表添加查询参数gid={sheetId}
在当前阶段,无法使用电子表格服务和工作表API直接访问ceatain修订版的电子表格。因此,从修订数据检索CSV数据时,如果已删除现有图纸和/或已添加新图纸,则无法检索所有图纸ID
解决方法1:
此解决方案假定电子表格中的图纸被删除和添加
在这次修改中,我使用了以下流程
var文件_id='1JqbuqOQS5NSFqfPlxJG-DY1HIW9xZl_ddjQa_F2pUv4';
var revisions=Drive.revisions.list(文件id);
var修订=修订。项目[修订。项目。长度-1];
//我修改了下面的脚本。
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();
对于(变量i=0;i
解决方法2:
此解决方案假定电子表格中的图纸不被删除也不被添加
在这次修改中,我使用了以下流程
var文件_id='1JqbuqOQS5NSFqfPlxJG-DY1HIW9xZl_ddjQa_F2pUv4';
var sheetIds=SpreadsheetApp.openById(file_id).getSheets().map(函数(e){returne e.getSheetId()});
var token=ScriptApp.getOAuthToken();
var revisions=Drive.revisions.list(文件id);
var修订=修订。项目[修订。项目。长度-1];
var reqs=sheetIds.map(功能(e){
var revUrl=Drive.Revisions.get(file_id,revision.id).exportLinks[“text/csv”]+”&access_-token=“+token+”&gid=“+e;
返回{url:revUrl,muteHttpExceptions:true};
});
var res=UrlFetchApp.fetchAll(要求);
对于(变量i=0;i
注:
- 这个答案假设驱动API是在高级Google服务中启用的
- 您希望检索最新版本。
- 这来自
var revision=revisions.items[revisions.items.length-1]
- 您还希望从其他修订中检索CSV数据
- 这来自
- 您希望从所有图纸中检索特定修订版的CSV数据
- 你想使用谷歌应用程序脚本
revUrl
检索所有工作表中的CSV数据。exportLinks[“text/csv”]
的默认端点表示电子表格的第一个标记。如果要检索其他工作表,需要为每个工作表添加查询参数gid={sheetId}
在当前阶段,无法使用电子表格服务和工作表API直接访问ceatain修订版的电子表格。因此,从修订数据检索CSV数据时,如果已删除现有图纸和/或已添加新图纸,则无法检索所有图纸ID
解决方法1:
此解决方案假定电子表格中的图纸被删除和添加
在这次修改中,我使用了以下流程
var文件_id='1JqbuqOQS5NSFqfPlxJG-DY1HIW9xZl_ddjQa_F2pUv4';
var修订版=驱动器修订版列表(fil
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);
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())
}
}