【发布时间】:2020-04-02 08:30:59
【问题描述】:
当我运行脚本以使用 OCR 将 PDF 文件转换为 Google 文档然后将结果填充到 Google 表格中时,我在获取 PDF 文件的链接时遇到了一个小问题。
到目前为止,我得到了创建的文件的名称(Google Docs)和提取的文本。
我想要实现的目标:在第 3 列,我想获取与创建的 Google 文档对应的 PDF 文件的链接
我尝试将变量 pdf 包含到 push 数组中:
var pdf = document.getId();
...
output.push([name, body, pdf]);
但我得到所有文件的相同 ID。理想情况下,我想获得 PDF 文件的完整链接,而不仅仅是它的 ID,以避免必须使用以下内容创建列:
=CONCATENATE("https://drive.google.com/file/d/",C2)
其中 C2 包含 PDF 文件的 ID。
代码如下:
function extractTextOnOpen() {
var folderName = "OCR TESTS";
var sheetId = "SHEET'S ID HERE";
//Define Project folder
var folder = DriveApp.getFoldersByName(folderName).next();
var folderId = folder.getId();
//Find all PDFs in folder
var documents = folder.getFilesByType("application/pdf");
while (documents.hasNext()) {
//Convert each PDF to a Google Doc with OCR
var document = documents.next();
// Get the PDF link to insert in the sheet for reference
var pdf = document.getId();
var imageName = document.getName();
var docName = imageName.split("\.")[0];
var file = {
title: docName,
mimeType: "application/pdf"
// for images, use: "image/png"
}
Drive.Files.insert(file, document, { ocr: true });
//Store newly-created Google Doc in the same project folder
var newFile = DriveApp.getFilesByName(docName).next();
folder.addFile(newFile);
var rootFolder = DriveApp.getRootFolder();
rootFolder.removeFile(newFile);
}
//Find all Google Docs in the project folder
var docs = folder.getFilesByType("application/vnd.google-apps.document");
//Set up spreadsheet
var ss = SpreadsheetApp.openById(sheetId);
SpreadsheetApp.setActiveSpreadsheet(ss);
Logger.log('File name: ' + ss.getName());
// specify the sheet to insert the results
var sheet = ss.getSheetByName('Sheet1');
// Set up the spreadsheet to display the results
var headers = [["File Name", "Test Paper Scanned", "PDF Link"]];
sheet.getRange("A1:C").clear()
sheet.getRange("A1:C1").setValues(headers);
var output = [];
//Populate spreadsheet with OCR text
while (docs.hasNext()) {
var file = docs.next();
var docId = file.getId();
var doc = DocumentApp.openById(docId);
var name = doc.getName();
var body = doc.getBody().getText();
output.push([name, body, pdf]);
// write data to the sheet
sheet.getRange(2, 1, output.length, 3).setValues(output);
}};
【问题讨论】:
标签: google-apps-script google-sheets