如何下载列中的PDF链接并保存到公用文件夹

时间:2015-09-30 21:26:54

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

我们有一个列,其中包含从第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])开始的链接,直到数据集的底部(例如,数据) 。长度())。

我现在对如何访问并将记录器中写入的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链接,然后我将测试这个新的代码。我觉得我已经接近了。

2 个答案:

答案 0 :(得分:0)

您无法强制从应用脚本下载文件,您必须从HTMLService尝试,并且不确定它是否有效。

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

在驱动器中,文件可以放在几个文件夹中,因此pdf文件保留在原始文件夹中,但是您创建了一个新文件夹&#39; PDF供下载&#34;例如,你把它们放在里面。要从驱动器界面执行此操作,您必须在选择文件时单击&#34; shift&#34; + Z.

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

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

编辑:功能将浏览网址列表,获取文件并在用户驱动器上的专用文件夹中进行复制。

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);
  }
}

答案 1 :(得分:0)

好吧我明白了。我期待更多的代码,但这对我有用:

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,我会发布它 - 但暂时上面的代码为我们节省了大量的时间......所以我把它称为足够好的时间是