1

我正在使用 Appsscript 开发一个 Google Docs 插件,它读取 Google Docs 的正文并将其显示在插件 UI 中。

要访问 Google 文档,我使用以下代码:

var doc = DocumentApp.getActiveDocument();
var body = doc.getBody().getText();

该代码是 Google Docs 文件的工作文件。

然后,我尝试阅读 .docx 文件的文本或正文,但出现以下异常:

例外:文档不可访问。请稍后再试。 异常图片

我查看了 StackOverflow 上给出的各种解决方案,但无法获得解决方案。StackOverflow 上的答案说要将 .docx 文件转换为 doc 文件。但是,我不能这样做,因为我无法获得打开文档的“ID”。

如果有人建议我如何获取打开的文档的 ID 或如何从浏览器 URL 获取文档的 ID 或如何解决此异常,我将不胜感激。

提前致谢。

4

1 回答 1

0

如果你有一个 URL,也许你可以通过这种方式获得一个 ID:

var url = 'https://docs.google.com/document/d/1BxECZrrIQpKFJYN5zHUeUDxeEiB8NjEb/edit'

var id = url.split('/')[5]

console.log(id) // output: 1BxECZrrIQpKFJYN5zHUeUDxeEiB8NjEb

然后您可以通过 ID 获取文件DriveApp并将其转换为 Google doc。如何做到这一点的新例子在这里:

使用应用脚本将 MS Word 文件(保存在云端硬盘中)转换为 Google Docs

如果您有 .docx 文件的 URL(我从您的问题中不清楚),代码可能是这样的:

function main() {
  var url = 'https://docs.google.com/document/d/abcd123456789/edit';
  var id = url.split('/')[5];
  var doc_file = convert_docx_to_google_doc(id);
  var doc = DocumentApp.openById(doc_file.id);
  var text = doc.getBody().getText(); // <--- contents of the doc file is here

  console.log(text);

  DriveApp.getFileById(doc_file.id).setTrashed(true); // delete the doc file
}


// you need to enable Advanced Drive API Service

function convert_docx_to_google_doc(id) {
  var docx = DriveApp.getFileById(id);
  var folder = docx.getParents().next();
  
  var google_doc = Drive.Files
    .insert(Drive.newFile(), docx.getBlob(), {convert:true});
  
  // it saves the file next to the original one in the same folder
  // it's not necessary if you don't need the file
  DriveApp.getFileById(google_doc.id)
    .setName(docx.getName().replace(/\.docx$/,'')).moveTo(folder);

  return google_doc; // return the google doc file
}
于 2021-11-26T15:14:53.890 回答