【问题标题】: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
相关资源
最近更新 更多