【问题标题】:How to Download PDF Links in Column and Save to Common Folder如何下载列中的 PDF 链接并保存到公用文件夹
【发布时间】:2015-09-30 21:26:54
【问题描述】:

我们有一列包含从第 4 行开始的 PDF 链接(例如 B4:B)。我正在尝试找到一种方法来自动下载通过驱动器上文件夹的链接访问的 PDF 文件。这是我目前所拥有的:

function savePDFs() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  for (var i = 3; i < data.length; i++) {
    Logger.log(data[i][1]);
  }
}

大概上面的代码会在第4行(i值为3)(即B4)的B列(索引值为[1])开始写入链接,直到数据集的底部(例如,数据.length())。

我现在对如何访问记录器中写入的 PDF 链接并将其保存到文件夹感到困惑。

有人愿意帮助我吗?我目前必须转到每个链接,单击将链接另存为...,然后导航到我要将链接的 PDF 保存到的文件夹。我希望是用代码修改上面的过程。

更新:我发现这段代码here 可能对我有所帮助。请注意,我将 PDF 链接更改为当前有效的 PDF 链接。

var urlOfThePdf = 'http://download.p4c.philips.com/l4b/9/929000277411_eu/929000277411_eu_pss_aenaa.pdf';// an example of online pdf file
var folderName = 'GAS';// an example of folder name

function saveInDriveFolder(){
  var folder = DocsList.getFolder(folderName);// get the folder
  var file = UrlFetchApp.fetch(urlOfThePdf); // get the file content as blob 
  folder.createFile(file);//create the file directly in the folder
}

好的,我将使用记录器中的数据来确认数据是否在格式正确的 PDF 链接中,然后我将测试这段新代码。我觉得我快接近了。

【问题讨论】:

    标签: pdf hyperlink google-apps-script google-sheets google-drive-api


    【解决方案1】:

    您不能从应用程序脚本强制下载文件,您必须从 HTMLService 尝试这样做,但不确定它是否能正常工作。

    根据您的需要,我建议您创建一个专用文件夹并将所有pdf添加到其中,然后使用驱动器界面的下载功能一次下载所有文件。

    在驱动器中,一个文件可以放在多个文件夹中,因此 pdf 文件保留在原始文件夹中,但您可以创建一个新文件夹“PDF for download”并将它们放入其中。要从驱动器界面执行此操作,您选择文件时必须单击“shift”+Z。

    对于您当前的文件列表,您只需在循环中添加添加到文件夹功能。你可以使用这个功能。

    function addFileToFolder(id){
      var folderPDF = DriveApp.getFolderById("Id OFFolder to put pdf");
      var file = DriveApp.getFileById(id);
      folderPDF.addFile(file);
    }
    

    编辑 : 函数将浏览 url 列表,获取文件并在用户驱动器上的专用文件夹中制作副本。

    function downloadInDriveFolder(){
      var folderID = 'Id of the folder';// put id of the folder
      var folder = DriveApp.getFolderById(folderID)// get the folder
      var sheet = SpreadsheetApp.getActiveSheet();
      var data = sheet.getDataRange().getValues();
      for (var i = 3; i < data.length; i++) {
        var blob = UrlFetchApp.fetch(data[i][1]).getContent();
        var pdf = DriveApp.createFile(blob);
        pdf.setName(data[i][0]);//Put as name of the file the value in col A
        folder.addFile(pdf);
      }
    }
    

    【讨论】:

    • 感谢 St3ph;如果我没看错,这是将文件添加到文件夹的代码部分,这很有用。这是一块拼图。现在我只需要找出如何将记录器中包含的 URL 链接作为字符串和“将链接另存为...”,或者以某种方式访问​​这些链接,然后使用您的代码将它们保存为文件夹中的 PDF已建议。挠头……
    • 我改了答案,请检查新功能。
    【解决方案2】:

    嗯,我想通了。我期待更多代码,但这对我有用:

    function listPDFs() { 
      var out = new Array();
      var row = 3; //row index of 0 = row 1
      var column = 4; // column index of 0 = column A
      var sheet = SpreadsheetApp.getActiveSheet();
      var data = sheet.getDataRange().getValues();
      var folder = DriveApp.getFolderById("this is where you paste your folder id"); // destination folder (this is the 0978SDFSDFKJHSDF078Y98hkyo looking value when you right click your folder and select "Get Link")
      for (var i=row ; i<data.length ; i++) { 
        if(data[i][column] !== "") {
          var file = UrlFetchApp.fetch(data[i][column]);
          folder.createFile(file);
        }
       }
      return   
    }
    

    如您所见,我包含了一个行和列变量,以便我可以轻松更改它们。

    我还没有弄清楚如何将它们组合成一个合并的 PDF,但我确实发现我可以按日期对它们进行排序(将最顶部的项目放在首位),然后右键单击并选择“打开方式.. .PDF Mergy”,然后将 PDF 移动到 PDF Mergy 并以正确的顺序合并它们。您可以在 Chrome App Store 中找到 PDF Mergy。如果我知道如何从 GAS 中自动调用 PDF Mergy,我会发布它——但目前上面的代码已经为我们节省了大量时间......所以我认为它已经足够好了存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 2018-11-03
      • 2012-12-26
      • 2021-01-12
      • 2023-03-27
      相关资源
      最近更新 更多