无法访问 Google 文档插件中的 .docx 文件

Unable to access .docx file in Google Docs Add-on

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

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

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

代码是 Google 文档文件的工作文件。

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

Exception: The document is inaccessible. Please try again later. Exception Picture

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

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

提前致谢。

如果您有 URL,您可能可以通过以下方式获得 ID:

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

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

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

然后你可以用DriveApp通过ID获取文件并将其转换为Google doc。如何完成的新示例在这里:

如果您有 .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
}