检索Google电子表格中所有工作表的值以进行特殊修订

麦克风

这是一个包含2张纸样张电子表格(Sheet1和Sheet2)。单元格的值为1)[Sheet1的[[“ This”,“ is”,“ first”,“ sheet”],[“ Added row 2”,“”,“”,“”]]] 2)[[“ This Sheet2的“,”是“,”第二“,”工作表“],[”添加的第二行“,”“,”“,”“]]

当我运行以下代码时,

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行,”

如何获得第二张纸的值?

Tanaike
  • 您要检索最新修订。
    • 这是来自var revision = revisions.items[revisions.items.length-1]
    • 您还希望从其他版本中检索CSV数据。
  • 您想从某个修订版的所有工作表中检索CSV数据。
  • 您要使用Google Apps脚本。

如果我的理解是正确的,那么这个答案呢?

问题:

不幸的是,无法从revUrl脚本中检索所有工作表的CSV数据默认端点exportLinks["text/csv"]指示电子表格的第一个标签。如果要检索其他工作表,则需要gid={sheetId}为每个工作表添加查询参数

并且在当前阶段,无法使用Spreadsheet Service和Sheets API直接访问ceatain版本的Spreadsheet。因此,当从修订数据中检索CSV数据时,如果已经删除了现有工作表和/或添加了新工作表,则无法检索所有工作表ID。

解决方法1:

此解决方法假定条件是删除并添加了电子表格中的工作表。

在此修改中,我使用了以下流程。

  1. 从某个修订的电子表格中检索XLSX数据。
  2. 将XLSX数据作为临时电子表格转换为Google Spreadsheet。
  3. 从转换后的电子表格中检索所有值作为CSV数据。
  4. 删除临时电子表格。

通过以上流程,可以检索来自具有特定修订版的所有工作表的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);

解决方法2:

此替代方法假定不删除和不添加电子表格中的工作表的条件。

在此修改中,我使用了以下流程。

  1. 从当前电子表格中检索所有工作表ID。
  2. 使用检索到的工作表ID创建请求。
  3. 从每个工作表中检索CSV数据。

通过以上流程,可以检索来自具有特定修订版的所有工作表的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())
  }
}

注意:

  • 此答案假定高级Google服务已启用Drive API。

参考文献:

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

电子表格中所有工作表上的setActiveCell。Google Apps脚本

自动清除脚本 - 在所有工作表的 Google 电子表格中

根据某些条件自动使 Google 电子表格中所有插入的文本大写

如何在 Google 电子表格工作簿中创建所有工作表的侧边栏列表?

如何在电子表格文件中的所有工作表上运行Google Apps脚本?

PHPExcel为电子表格中的所有工作表设置边框和格式

在电子表格中的所有工作表中轻松搜索

如何将现有的Google工作表插入Google电子表格?

从具有动态值的工作表更新动态电子表格“数据库”

带有多个工作表的google电子表格供稿

我想隐藏Google驱动器电子表格中所有在A列的单元格中没有任何值的行

从Google电子表格中获取所有工作表标签名称的列表,然后将其放入另一个电子表格中

我的行删除过程对于单张纸工作正常。如何对具有特定名称的电子表格的所有工作表进行处理?

如何使用Google脚本修改电子表格中所有条形图的标题?

使用电子表格进行冷熔,以克隆现有工作表作为新工作表的模板

自动将所有工作表中的所有文本更改为大写,但不更改整个Google电子表格中的数字

在Google电子表格中将所有工作表中的所有文本自动更改为大写,但排除一些Unicode字符

删除电子表格中所有分组的行/列

是否可以在不知道电子表格名称的情况下获取电子表格中所有页面的名称?

如何重命名 Google 电子表格(文件)并使用工作表中的值填充其内容

如何在Google电子表格的另一张工作表上导入具有匹配值的行?

Google电子表格:在活动工作表中插入数据透视表。

如何使用HtmlService将值从Google电子表格检索到文本字段

如何更改Google表格电子表格的所有者?

使用现有范围名称从电子表格读取或检索值

从ASP.NET写入Google工作表中的电子表格

在单个工作表而不是整个电子表格上运行Google脚本

检查Google电子表格中是否存在工作表

使用Google Sheet API在电子表格中添加(创建)新工作表