Apps 脚本 Drive.Files.insert 不是函数

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

我正在尝试使用从 Google 表格调用的 Apps 脚本将 .pdf 文件转换为文本。我正在使用 Advanced Drive API 服务(这似乎是唯一的方法)。我已添加 Drive API 服务并将应用程序部署为 API。该应用程序运行,将 pdf 从用户电脑上传到驱动器文件。该文件被传递给从 Github 复制的代码,该代码应该执行转换,但失败了

类型错误:Drive.Files.insert 不是函数

我不认为这是错误的代码,但也许是我配置Apps脚本的方式。我正在努力寻找任何可以帮助我了解哪里出了问题的文档。

第 17 行失败的函数 const { id, title } = Drive.Files.insert( :

/*
 * Convert PDF file to text
 * @param {string} fileId - The Google Drive ID of the PDF
 * @param {string} language - The language of the PDF text to use for OCR
 * return {string} - The extracted text of the PDF file
 */

const convertPDFToText = (fileId, language) => {
  fileId = fileId || '18FaqtRcgCozTi0IyQFQbIvdgqaO_UpjW'; // Sample PDF file
  language = language || 'en'; // English

  // Read the PDF file in Google Drive
  const pdfDocument = DriveApp.getFileById(fileId);

  // Use OCR to convert PDF to a temporary Google Document
  // Restrict the response to include file Id and Title fields only
  const { id, title } = Drive.Files.insert(
    {
      title: pdfDocument.getName().replace(/\.pdf$/, ''),
      mimeType: pdfDocument.getMimeType() || 'application/pdf',
    },
    pdfDocument.getBlob(),
    {
      ocr: true,
      ocrLanguage: language,
      fields: 'id,title',
    }
  );

  // Use the Document API to extract text from the Google Document
  const textContent = DocumentApp.openById(id).getBody().getText();

  // Delete the temporary Google Document since it is no longer needed
  DriveApp.getFileById(id).setTrashed(true);

  // (optional) Save the text content to another text file in Google Drive
  const textFile = DriveApp.createFile(`${title}.txt`, textContent, 'text/plain');
  return textContent;
};

google-apps-script google-drive-api
1个回答
0
投票

关于您的错误消息

TypeError: Drive.Files.insert is not a function
,2023年12月11日,高级Google服务的Drive API可以使用v3。 参考 现在,当在高级 Google 服务中启用 Drive API 时,Drive API v3 将用作默认版本。并且,在 Drive API v3 中,
insert
方法不包含在
Drive.Files
中。我猜这可能是您当前问题的原因。

当我看到你的显示脚本时,它似乎是针对 Drive API v2 的。因此,如果您想使用显示脚本,请在高级 Google 服务中将 Drive API v3 设置为 v2,如下所示。

并且,作为另一种方法,如果您的显示脚本转换为 Drive API v3,它将变为如下。

/*
 * Convert PDF file to text
 * @param {string} fileId - The Google Drive ID of the PDF
 * @param {string} language - The language of the PDF text to use for OCR
 * return {string} - The extracted text of the PDF file
 */

const convertPDFToText = (fileId, language) => {
  fileId = fileId || '18FaqtRcgCozTi0IyQFQbIvdgqaO_UpjW'; // Sample PDF file
  language = language || 'en'; // English

  // Read the PDF file in Google Drive
  const pdfDocument = DriveApp.getFileById(fileId);

  // Use OCR to convert PDF to a temporary Google Document
  // Restrict the response to include file Id and Title fields only
  const { id, name } = Drive.Files.create(
    {
      name: pdfDocument.getName().replace(/\.pdf$/, ''),
      mimeType: MimeType.GOOGLE_DOCS,
    },
    pdfDocument.getBlob(),
    {
      ocrLanguage: language,
      fields: 'id,name',
    }
  );

  // Use the Document API to extract text from the Google Document
  const textContent = DocumentApp.openById(id).getBody().getText();

  // Delete the temporary Google Document since it is no longer needed
  DriveApp.getFileById(id).setTrashed(true);

  // (optional) Save the text content to another text file in Google Drive
  const textFile = DriveApp.createFile(`${name}.txt`, textContent, 'text/plain');
  return textContent;
};

此修改后的脚本适用于 Drive API v3。

注:

  • 如果发生与范围相关的错误,请从
    oauthScopes
    中删除
    appsscript.json
    的属性,然后再次运行脚本。如果错误未消除,请创建一个新的 Google Apps 脚本项目,然后复制并粘贴该脚本并启用 Drive API v2 或 v3 并再次测试。

参考资料:

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