我有 Google Sheet 和 Google 应用程序脚本,它是在 ChatGPT 的帮助下创建的。它编写了一个代码,从选定的范围创建 PDF 文件,设置文件名,然后将其保存在“我的云端硬盘”中。我想要一个代码能够查看保存的 PDF 文件,但 ChatGPT 的代码显示“drive.google.com 拒绝连接”。显示在模式对话框内。
这是它给出的代码:
function viewPDF() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var certificateSheet = ss.getSheetByName("Certificate");
// Define the filename
var filename = certificateSheet.getRange("D4").getValue() + "_" + certificateSheet.getRange("B6").getValue() + "_" + certificateSheet.getRange("D6").getValue() + ".pdf";
// Search for the PDF file in "My Drive"
var folder = DriveApp.getRootFolder();
var files = folder.getFilesByName(filename);
// If the file exists, get the first matching file
if (files.hasNext()) {
var pdfFile = files.next();
// Get the URL of the PDF file
var pdfUrl = pdfFile.getUrl();
// Check if the URL is in the direct link format
if (pdfUrl.includes('/file/d/')) {
// Convert the URL to the Google Drive PDF viewer format
var fileId = pdfUrl.match(/\/file\/d\/(.+?)\//)[1];
pdfUrl = 'https://drive.google.com/viewerng/viewer?url=https://drive.google.com/file/d/' + fileId + '/view?usp=drive_link';
}
// Create HTML content for modal dialog
var html = '<iframe src="' + pdfUrl + '" width="100%" height="100%"></iframe>';
// Create a modal dialog
var htmlOutput = HtmlService.createHtmlOutput(html)
.setWidth(800)
.setHeight(600);
SpreadsheetApp.getUi().showModalDialog(htmlOutput, "PDF Viewer");
} else {
// If the file does not exist, display an error message
SpreadsheetApp.getUi().alert("PDF file not found.");
}
}
我尝试了其他AI网站,但chatGPT给出的代码最接近我想要的。
从您显示的脚本和错误消息来看,我担心以下修改点。
url=https://drive.google.com/file/d/' + fileId + '/view?usp=drive_link
网址在这种情况下可能无法使用。当这些点都体现在你的脚本中时,下面的修改如何?
本次修改中,使用的PDF URL来自此官方文档。
function viewPDF() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var certificateSheet = ss.getSheetByName("Certificate");
var filename = certificateSheet.getRange("D4").getValue() + "_" + certificateSheet.getRange("B6").getValue() + "_" + certificateSheet.getRange("D6").getValue() + ".pdf";
var folder = DriveApp.getRootFolder();
var files = folder.getFilesByName(filename);
if (files.hasNext()) {
var pdfFile = files.next();
// pdfFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); // If an error related to the permission occurred, please use this line.
var pdfUrl = pdfFile.getUrl();
if (pdfUrl.includes('/file/d/')) {
var fileId = pdfFile.getId();
pdfUrl = `<iframe src="https://drive.google.com/file/d/${fileId}/preview" width="100%" height="100%" allow="autoplay"></iframe>`;
}
var html = `<html><style>html,body { width: 100%; height: 100%; }</style><body>${pdfUrl}</body></html>`;
var htmlOutput = HtmlService.createHtmlOutput(html).setWidth(800).setHeight(600);
SpreadsheetApp.getUi().showModalDialog(htmlOutput, "PDF Viewer");
} else {
SpreadsheetApp.getUi().alert("PDF file not found.");
}
}
在这种情况下,似乎PDF文件不需要公开共享。但是,如果发生与权限相关的错误,请使用上面的注释行。
运行该脚本,得到如下结果。
在此修改中,使用来自此线程的 PDF URL。
function viewPDF() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var certificateSheet = ss.getSheetByName("Certificate");
var filename = certificateSheet.getRange("D4").getValue() + "_" + certificateSheet.getRange("B6").getValue() + "_" + certificateSheet.getRange("D6").getValue() + ".pdf";
var folder = DriveApp.getRootFolder();
var files = folder.getFilesByName(filename);
if (files.hasNext()) {
var pdfFile = files.next();
pdfFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
var pdfUrl = pdfFile.getUrl();
if (pdfUrl.includes('/file/d/')) {
var fileId = pdfFile.getId();
pdfUrl = `https://drive.google.com/viewerng/viewer?embedded=true&url=https://drive.usercontent.google.com/download?id=${fileId}&confirm=xxx`;
}
var html = `<html><style>html,body { width: 100%; height: 100%; }</style><body><iframe src="${pdfUrl}" width="100%" height="100%"></iframe></body></html>`;
var htmlOutput = HtmlService.createHtmlOutput(html).setWidth(800).setHeight(600);
SpreadsheetApp.getUi().showModalDialog(htmlOutput, "PDF Viewer");
} else {
SpreadsheetApp.getUi().alert("PDF file not found.");
}
}