找不到文档并出现错误 https://docs.google.com 请求失败返回代码 401

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

我想下载一个有关运行应用程序脚本的 pdf 格式的 google 文档文件。

//Code.gs

function run() {
  const documentId = 'somDocId';
  try {
    // Get the document using document id
    const doc = Docs.Documents.get(documentId);
    
    
    
    createPDF(doc.title);
  } catch (err) {
    // TODO (developer) - Handle exception from Docs API
    console.log('Failed to found document with an error %s', err.message);
  }
}


function createPDF(pdfName) {
  const url = "https://docs.google.com/document/d/somDocId/export?format=pdf";

  const params = { method: "GET", headers: { "authorization": "Bearer " + ScriptApp.getOAuthToken() } };
  const blob = UrlFetchApp.fetch(url, params).getBlob().setName(pdfName + '.pdf');

  // below instead of saving to drive, I want to directly download in current window
  const folder = getFolderByName_("someFolder");

  folder.createFile(blob);
}


run();


我也遇到以下错误

Failed to found document with an error Request failed for https://docs.google.com returned code 401. Truncated server response: <!DOCTYPE html><style...
google-apps-script blob google-docs google-docs-api
1个回答
0
投票

我认为在您的显示脚本中,当

documentId
url
folder
是有效值时,您的脚本工作正常,同时由于全局的
run();
而创建了 2 个 PDF 文件。因此,从您的以下显示错误消息来看,

无法找到带有错误的文档 https://docs.google.com 的请求失败,返回代码 401。服务器响应被截断:

如果

documentId
是无效值,我认为会发生像
Requested entity was not found.
这样的错误。所以,你的显示脚本,我想
documentId
是一个有效值。而且,如果
url
是无效值,我猜您会显示错误消息。所以,我担心你可能会直接使用
https://docs.google.com/document/d/somDocId/export?format=pdf
的URL。如果我的理解正确的话,下面的修改如何?

修改后的脚本:

请将您的有效 Google 文档 ID 设置为

documentId
。并且,运行函数
run()
。这样,脚本就运行了。

function run() {
  const documentId = 'somDocId';

  try {
    const doc = Docs.Documents.get(documentId);
    createPDF(doc.title, documentId); // Modified
  } catch (err) {
    console.log('Failed to found document with an error %s', err.message);
  }
}

function createPDF(pdfName, documentId) { // Modified
  const url = `https://docs.google.com/document/d/${documentId}/export?format=pdf`; // Modified

  const params = { method: "GET", headers: { "authorization": "Bearer " + ScriptApp.getOAuthToken() } };
  const blob = UrlFetchApp.fetch(url, params).getBlob().setName(pdfName + '.pdf');
  const folder = getFolderByName_("someFolder");
  folder.createFile(blob);
}

// run(); // Removed.

注:

  • 不幸的是,在您的显示脚本中,功能
    getFolderByName_
    未显示。在此修改中,假设函数
    getFolderByName_
    已在其他地方声明,并返回有效值。请注意这一点。
© www.soinside.com 2019 - 2024. All rights reserved.