Ошибка ГАЗА: «неверный аргумент (строка 3,« Код ») - PullRequest
0 голосов
/ 15 октября 2019

Это код:

    function dataAutofill() {
    var doc = DocumentApp.openByUrl('inserted drive link here');
    console.log(doc);
    }

Ошибка ГАЗА: «неверный аргумент (строка 3,« Код »)

Я собираюсь прочитать ссылку на дисккоторый открывает представление PDF, извлекает информацию из него и затем записывает эту информацию в электронную таблицу. Однако я застрял в точке, где функция читает данные ..

Редактировать 1: Это уже былоуказал, что я не могу использовать openbyURl через DocumentApp

1 Ответ

0 голосов
/ 16 октября 2019

Вы хотите импортировать содержимое файла PDF (в виде текста) в электронную таблицу Google.

Как указано @Jescanellas, это охватывается темой Получение текста из PDF в Google . Ответ Mogsdad особенно полезен, и следующий ответ представляет собой не что иное, как объединение различных компонентов в один ответ, соответствующий вашему сценарию.

В качестве подтверждения концепции - я создал простую таблицу с использованием Google Document и сохранилдокумент в файл PDF, загрузил файл PDF в папку на Google Диске, затем запустил этот скрипт (который привязан к электронной таблице). Файл PDF вставляется в ячейку «А1» электронной таблицы. Этот подход не претендует на отражение ваших данных - для этого, как вы думаете, у вас будет метод для заполнения ячеек электронной таблицы.

Ресурсы> Расширенные службы Google - Drive API

Сценарий требует, чтобы в редакторе сценариев был включен Drive Drive API:
Ресурсы> Расширенные службы Google> Drive API.

Примечание:

Mogsdad относится к функции pdfToText(), которую можно найти как gist (pdfToText.js). Будущие читатели этого ответа должны это учесть, поскольку суть может со временем меняться.


function so5838796101() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetname = "58387961";
  var sheet = ss.getSheetByName(sheetname);

  // identify the PDF file
  var pdfFile = DriveApp.getFilesByName("so_58387961_export_from_Google_Docs.pdf").next();
  var blob = pdfFile.getBlob();

  // Get the text from pdf
    // this uses Mogsdad's gist
  var filetext = pdfToText( blob, {keepTextfile: false} );

  // define destination and set value
  var sheetdata =sheet.getRange("A1");
  sheetdata.setValue(filetext);
}

// Mogsdad's gist start
/**
 * Convert pdf file (blob) to a text file on Drive, using built-in OCR.
 * By default, the text file will be placed in the root folder, with the same
 * name as source pdf (but extension 'txt'). Options:
 *   keepPdf (boolean, default false)     Keep a copy of the original PDF file.
 *   keepGdoc (boolean, default false)    Keep a copy of the OCR Google Doc file.
 *   keepTextfile (boolean, default true) Keep a copy of the text file.
 *   path (string, default blank)         Folder path to store file(s) in.
 *   ocrLanguage (ISO 639-1 code)         Default 'en'.
 *   textResult (boolean, default false)  If true and keepTextfile true, return
 *                                        string of text content. If keepTextfile
 *                                        is false, text content is returned without
 *                                        regard to this option. Otherwise, return
 *                                        id of textfile.
 *
 * @param {blob}   pdfFile    Blob containing pdf file
 * @param {object} options    (Optional) Object specifying handling details
 *
 * @returns {string}          id of text file (default) or text content
 */
function pdfToText ( pdfFile, options ) {
  // Ensure Advanced Drive Service is enabled
  try {
    Drive.Files.list();
  }
  catch (e) {
    throw new Error( "To use pdfToText(), first enable 'Drive API' in Resources > Advanced Google Services." );
  }

  // Set default options
  options = options || {};
  options.keepTextfile = options.hasOwnProperty("keepTextfile") ? options.keepTextfile : true;

  // Prepare resource object for file creation
  var parents = [];
  if (options.path) {
    parents.push( getDriveFolderFromPath (options.path) );
  }
  var pdfName = pdfFile.getName();
  var resource = {
    title: pdfName,
    mimeType: pdfFile.getContentType(),
    parents: parents
  };

  // Save PDF to Drive, if requested
  if (options.keepPdf) {
    var file = Drive.Files.insert(resource, pdfFile);
  }

  // Save PDF as GDOC
  resource.title = pdfName.replace(/pdf$/, 'gdoc');
  var insertOpts = {
    ocr: true,
    ocrLanguage: options.ocrLanguage || 'en'
  }
  var gdocFile = Drive.Files.insert(resource, pdfFile, insertOpts);

  // Get text from GDOC  
  var gdocDoc = DocumentApp.openById(gdocFile.id);
  var text = gdocDoc.getBody().getText();

  // We're done using the Gdoc. Unless requested to keepGdoc, delete it.
  if (!options.keepGdoc) {
    Drive.Files.remove(gdocFile.id);
  }

  // Save text file, if requested
  if (options.keepTextfile) {
    resource.title = pdfName.replace(/pdf$/, 'txt');
    resource.mimeType = MimeType.PLAIN_TEXT;

    var textBlob = Utilities.newBlob(text, MimeType.PLAIN_TEXT, resource.title);
    var textFile = Drive.Files.insert(resource, textBlob);
  }

  // Return result of conversion
  if (!options.keepTextfile || options.textResult) {
    return text;
  }
  else {
    return textFile.id
  }
}

// Helper utility from http://ramblings.mcpher.com/Home/excelquirks/gooscript/driveapppathfolder
function getDriveFolderFromPath (path) {
  return (path || "/").split("/").reduce ( function(prev,current) {
    if (prev && current) {
      var fldrs = prev.getFoldersByName(current);
      return fldrs.hasNext() ? fldrs.next() : null;
    }
    else { 
      return current ? null : prev; 
    }
  },DriveApp.getRootFolder()); 
}
// Mogsdad's gist end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...