使用Google Apps脚本从Google文档提取文本

问题描述 投票:1回答:1

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

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

我为表格编写了代码,可以轻松地提取它并将其粘贴到新的doc文件中。但无法从第三页提取列表项。

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-apps-script google-docs google-apps
1个回答
0
投票
  • 您要将源Google文档中的第一个表以及第二个和第三个列表复制到另一个Google文档。
    • 根据您的情况,您希望在第一个表之后检索2个列表。您想检索表和列表之间的段落。
    • 这是来自您的共享文档。
  • 您想使用Google Apps脚本来实现。

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

问题和解决方法:

不幸的是,在当前阶段,不能使用Document service的字形符号。这样,当通过设置原始字形符号来复制带有字形符号的列表时,将使用默认符号。为了解决此问题,我使用了以下流程。

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

通过以上流程,可以复制第一张表以及第二张和第三张列表。为了实现这一目标,我使用了Google Docs API。由于您的文档中有多个内联对象,因此很遗憾,我找不到使用Document服务删除它们的方法。内联对象可以通过Docs API删除,范围可以通过一个API调用删除。

示例脚本:

运行脚本之前,

please enable Google Docs API at Advanced Google services.

注意:

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

参考:

  • 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); }
  • Document Service
  • Advanced Google services
  • Method: documents.get of Docs API

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

© www.soinside.com 2019 - 2024. All rights reserved.