我有一个问题。 我有一个包含一长串 URL(其中数百个)的文件,我需要将它们转换为一系列单独的 docx 文件 PDF,以便能够在 NVIVO 中进一步使用它们。
谷歌搜索后,我发现这个讨论完全符合我的问题。我尝试按照说明进行操作 - 创建了一个 Google 表格,为我的案例采用了一个代码,但它没有用 - 相反我收到一条消息“在获取对象 DriveApp 上的方法或属性 getFileById 时出现意外错误”。调试时,我被告知 document 是 undefined。我是使用 Google App Script 的新手,所以我不知道我到底做错了什么。你能帮帮我吗?
这是我使用的代码:
function convertDocuments() {
/* Select the Spreadsheet */
const SS_ID = "1_4rjweZYHTTed6j740rVSZIFVPsrww6KvKwFikmlOzM"
const SS = SpreadsheetApp.openById(SS_ID)
const PDF_MIME = "application/pdf"
const newFolder = DriveApp.createFolder('PDFs')
/* Get the links */
const getLinks = SS.getRange('A1:A51').getValues()
getLinks.forEach((cells)=>{
const link = cells[0]
if(link==="") return
/* Getting the ID from the URL */
const parseID = link.toString().split("/")[7]
/* CREATE THE PDF */
const document = DriveApp.getFileById(parseID).getAs(PDF_MIME).copyBlob()
/* Inserting the PDF into the file */
newFolder.createFile(document)
})
Logger.log(newFolder.getUrl())
/* downloadFolder(newFolder.getId()) */
}
这是我尝试测试的 Google 表格:https://docs.google.com/spreadsheets/d/1_4rjweZYHTTed6j740rVSZIFVPsrww6KvKwFikmlOzM/edit?usp=sharing
谢谢!
您想将外部 URL 列表保存为 PDF。基于转换 Doc URLS 列表的脚本被无意中用作脚本的基础。
下面的答案采用了您的脚本的实质内容,并采用了将网页另存为 Google Doc(或 PDF)到云端硬盘中描述的方法,以将每个 URL 保存为 PDF。
这个脚本可以更高效,但就目前而言,它在@100 秒内处理 50 个 URL。
注意有一个失败:
http://www.kremlin.ru/events/president/transcripts/articles/5413/photos/print
返回 404 错误。function saveURLAsPDF() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheetName = "Sheet1"
var sheet = ss.getSheetByName(sheetName)
var data = sheet.getDataRange().getValues()
var links = data.map(function(e){return e[0]})
//Logger.log(links) // DEBUG
// Create a new folder
var parentFolderId = "1wL9AyFsAgIjFruQSLfTmTX3uYEU7z9FV"
var parentFolder = DriveApp.getFolderById(parentFolderId);
var pdfFolder = parentFolder.createFolder("PDFS");
// create array to track errors
var errors = []
for (var i=0;i<links.length;i++){
//Logger.log("DEBUG: i"+i+", url:"+links[i])
var url = links[i]
var parseID = url.toString().split("/")[7]
//Logger.log(parseID)
var pdfName = parseID+".pdf"
//Logger.log("DEBUG: i:"+i+", name: "+pdfName)
try{
var response = UrlFetchApp.fetch(url);
var htmlBody = response.getContentText();
var blob = Utilities.newBlob(htmlBody, 'text/html').getAs('application/pdf').setName(pdfName);
pdfFolder.createFile(blob);
errors.push(['OK'])
}
catch (error){
errors.push(["failed"])
}
}
sheet.getRange(1,2,links.length,1).setValues(errors)
}