无法访问 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
}
我正在使用 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
}