【问题标题】:Extract Text from google doc using google apps script使用谷歌应用脚​​本从谷歌文档中提取文本
【发布时间】:2019-11-23 07:02:55
【问题描述】:

我有一个谷歌文档。 https://docs.google.com/document/d/1ryvCCj1NCF12RnQx0IyluJmRpW740icoBLIFOJj2juE/edit?usp=sharing

我想从文档中提取红色文本部分[红色仅供参考]。 红色部分是doc文件第2页和第3页的表格和列表。

我为表格编写代码,我很容易将其提取并粘贴到新的 doc 文件中。但无法从第 3 页提取列表项。

function test(){
  var sourcedoc = DocumentApp.openById('id');
  var sourcebody = sourcedoc.getBody();
  var tables = sourcebody.getTables();
  var table = tables[0].copy();
  var destdoc = DocumentApp.openById('id');
  var destbody = destdoc.getBody();
  var x = destbody.appendTable(table);
}

【问题讨论】:

  • 不要删除原始 Google 文档

标签: google-apps-script google-docs google-apps


【解决方案1】:
  • 您想将源 Google 文档中的第 1 个表以及第 2 个和第 3 个列表复制到另一个 Google 文档。
    • 在您的情况下,您希望在第一个表之后检索 2 个列表。并且您想检索表格和列表之间的段落。
    • 这是来自您的共享文档。
  • 您希望使用 Google Apps 脚本实现此目的。

如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

问题和解决方法:

很遗憾,在当前阶段,Document service 无法使用 的字形符号。这样,当通过设置原始字形符号复制具有 字形符号的列表时,将使用默认符号。为了解决这个问题,我使用了以下流程。

  1. 复制 Google 文档。
  2. 从复制的 Google 文档中扫描要复制的范围。
  3. 从复制的 Google 文档中删除要复制的范围以外的范围。
  4. 从复制的 Google 文档中删除内联对象。

通过上述流程,可以复制第一个表和第二个和第三个列表。为了实现这一点,我使用了 Google Docs API。因为您的 Document 中有几个内联对象,不幸的是,我找不到使用 Document 服务删除它们的方法。内联对象可以通过Docs API删除,范围可以通过一个API调用删除。

示例脚本:

在运行脚本之前,please enable Google Docs API at Advanced Google services.

function myFunction() {
  var sourcedocId = '###'; // Please set the source Google Document ID.
  var filenameOfDestDocument = "sampleDestDocument"; // Please set the destination filename of Google Document.

  var fileId = DriveApp.getFileById(sourcedocId).makeCopy(filenameOfDestDocument).getId();
  var doc = Docs.Documents.get(fileId);
  var content = doc.body.content;
  var obj = {table: 1, list: 2};
  var reqs = [];
  for (var i = 0; i < content.length; i++) {
    if ("table" in content[i]) {
      reqs.push({deleteContentRange: {range: {startIndex: 1, endIndex: content[i].startIndex - 1}}});
      obj.table--;
    } else if (obj.table == 0 && obj.list > 0 && "paragraph" in content[i] && "bullet" in content[i].paragraph) {
      while ("paragraph" in content[i] && "bullet" in content[i].paragraph) ++i;
      obj.list--;
    } else if (obj.table == 0 && obj.list == 0) {
      reqs.push({deleteContentRange: {range: {startIndex: content[i].endIndex, endIndex: content[content.length - 1].endIndex - 1}}});
      break;
    } else if ("paragraph" in content[i] && "positionedObjectIds" in content[i].paragraph) {
      Array.prototype.push.apply(reqs, content[i].paragraph.positionedObjectIds.map(function(e) {return {deletePositionedObject: {objectId: e}}}));
    }
  }
  Docs.Documents.batchUpdate({requests: reqs.reverse()}, fileId);
}

注意:

  • 在此脚本中,目标 Google 文档创建到与源 Google 文档相同的文件夹中。
  • 在这种情况下,该脚本可用于您共享的 Google 文档。如果您更改文档,请修改脚本。

参考资料:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

【讨论】:

  • 我检查了这个并且工作得很好。如果我需要这方面的帮助。我会在这里发表评论。你是个天才。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
相关资源
最近更新 更多