当我运行脚本以使用OCR将PDF文件转换为Google文档然后将结果填充到Google表格中时,我在获取PDF文件的链接时遇到了一个小问题。
到目前为止,我得到了所创建文件的名称(Google文档)和提取的文本。
我要实现的目标:在第三列,我想获取与创建的Google文档相对应的PDF文件的链接
我尝试将变量pdf包含在推数组中:
worksheet.pageSetup.horizontalCentered = true
worksheet.pageSetup.verticalCentered = true
但是我为所有文件获得相同的ID。理想情况下,我想获得指向PDF文件的完整链接,不仅要获取ID,还可以避免创建带有以下内容的列:
var pdf = document.getId();
...
output.push([name, body, pdf]);
其中C2包含PDF文件的ID。
代码如下:
=CONCATENATE("https://drive.google.com/file/d/",C2)
答案 0 :(得分:2)
您有不必要的循环,因此您失去了保存PDF URL的机会。我更改了代码的顺序,以向您展示其工作方式。本质上,所有工作都在您遍历PDF的第一个循环内进行。*
function extractTextOnOpen() {
var folderName = "OCR TESTS";
var sheetId = "SHEET'S ID HERE";
//Set up spreadsheet
var ss = SpreadsheetApp.openById(sheetId);
// 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()
var output = [headers];
//Define Project folder
var folder = DriveApp.getFoldersByName(folderName).next();
var folderId = folder.getId();
//Find all PDFs in folder
var pdfs = folder.getFilesByType("application/pdf");
while (pdfs.hasNext()) {
//Convert each PDF to a Google Doc with OCR
var pdf = pdfs.next();
var imageName = pdf.getName();
var docName = imageName.split("\.")[0];
var file = {
title: docName,
mimeType: "application/pdf"
};
var driveFile = Drive.Files.insert(file, pdf, { ocr: true });
//Store newly-created Google Doc in the same project folder
var newFile = DriveApp.getFileById(driveFile.id);
folder.addFile(newFile);
var rootFolder = DriveApp.getRootFolder();
rootFolder.removeFile(newFile);
//Get the Google Doc data
var doc = DocumentApp.openById(driveFile.id);
var name = doc.getName();
var body = doc.getBody().getText();
output.push([name, body, pdf.getUrl()]);
}
//Print to the sheet
sheet.getRange(1, 1, output.length, output[0].length).setValues(output);
}
在上面的代码中,请注意Drive API返回一个file,因此在后续的.getFileById()
调用中使用了它。然后,您可以使用.getUrl()
或.getDownloadUrl()
。
var driveFile = Drive.Files.insert(file, pdf, { ocr: true });
//Store newly-created Google Doc in the same project folder
var newFile = DriveApp.getFileById(driveFile.id);
此外,您正在使用批次.setValues()
,该批次速度更快,但是您将其循环了。我将脚本更新为只在最后一次打印到印张。
* 如果您真的要先经历两个PDF循环,然后再经历Google Docs,那么您需要在第一个循环中将PDF ID映射到Google Doc ID。
答案 1 :(得分:0)