使用 Google Sheets 上的 Google App 脚本查看保存在 Google Drive 中的 PDF 文件

问题描述 投票:0回答:1

我有 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给出的代码最接近我想要的。

google-sheets google-apps-script pdf
1个回答
0
投票

从您显示的脚本和错误消息来看,我担心以下修改点。

修改要点:

  • 我担心您的
    url=https://drive.google.com/file/d/' + fileId + '/view?usp=drive_link
    网址在这种情况下可能无法使用。

当这些点都体现在你的脚本中时,下面的修改如何?

修改后的脚本1:

本次修改中,使用的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文件不需要公开共享。但是,如果发生与权限相关的错误,请使用上面的注释行。

  • 运行该脚本,得到如下结果。

修改后的脚本2:

在此修改中,使用来自此线程的 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.");
  }
}
  • 在这种情况下,似乎需要公开共享PDF文件。
© www.soinside.com 2019 - 2024. All rights reserved.