使用 Logger.Log 记录不同的值

Using Logger.Log to log different value

我想知道:是否可以在 Google Apps 脚本中使用 Logger.Log 来记录要 posted 到电子表格中的不同字符串?

我有以下代码:

var ss = SpreadsheetApp.openByUrl("spreadsheet url");
var sheet = ss.getSheetByName("spreadsheet sheet");
var DocNumber = e.parameter.DocNumber;
  var folderId = "Folder ID 1";
  var lastFileUrl = getLatestFile(folderId); // just a function that retrieves url of latest file in the folder

  Logger.log(lastFileUrl);

  var addUrl = sheet.getRange(1,2,sheet.getLastRow(),1);
  var fileURL = "https://drive.google.com/uc?export=view&id="+lastFileUrl;


  var folderId2 = "Folder ID 2";
  var lastFileUrl2 = getLatestFile(folderId2); // same as above

  Logger.log(lastFileUrl2);

  var addUrl2 = sheet.getRange(1,3,sheet.getLastRow(),1);
  var fileURL2 = "https://drive.google.com/uc?export=view&id="+lastFileUrl2;


sheet.appendRow([DocNumber,fileURL,fileURL2]);

}

当这个 posted 到电子表格时,它只 post 是第二个 url (文件URL2)-我假设因为最后一个值在日志是这样的。但我希望 post 都 URL 到电子表格中。

我也尝试先将其设置为 var:

var URL2 = Logger.log(lastFileURL2);

但 posted 值将是 https://drive.google.com/uc?export=view&id=Logger

我也尝试在第二个 URL 日志记录之前使用 appendRow 但它仍然只需要第二个 url 而忽略第一个 url.

因此,我很好奇这是否可能?

如果不行,不使用 Logger.log 实现此目标的最佳方法是什么?

电子表格输出:

URL1URL2 是 Google Drive 文件夹中的 URL。 另外,忘了提及,我将脚本用作 Web 应用程序,由 android 应用程序使用。将文件发布到 Drive 文件夹中是可以的,唯一的问题是获取不同文件夹中文件的链接。

这些是我用来从我的文件夹中获取最新文件 url 的代码:

function getLatestFile(folderId) {
  var files = DriveApp.getFolderById("Folder_1_ID").getFiles();
  var fileObj = [];
  while (files.hasNext()) {
    var file = files.next();
    fileObj.push({id: file.getId(), date: file.getDateCreated()});
  }
  fileObj.sort(function(a, b) {return new Date(b.date) - new Date(a.date)});
  return fileObj[0].id;
}


function getLatestFile(folderId2) {
  var files2 = DriveApp.getFolderById("Folder_2_ID").getFiles();
  var fileObj2 = [];
  while (files2.hasNext()) {
    var file2 = files2.next();
    fileObj2.push({id: file2.getId(), date: file2.getDateCreated()});
  }
  fileObj2.sort(function(a, b) {return new Date(b.date) - new Date(a.date)});
  return fileObj2[0].id;
}

问题

以相同的名称声明了两个函数

解决方案

一步一步:

  1. 删除其中一个函数(它们在用法上是相同的)
  2. 让剩下的一个使用传入的参数:
function getLatestFile(folderId) {
  var files = DriveApp.getFolderById(folderId).getFiles();
  var fileObj = [];
  while (files.hasNext()) {
    var file = files.next();
    fileObj.push({id: file.getId(), date: file.getDateCreated()});
  }
  fileObj.sort(function(a, b) {return new Date(b.date) - new Date(a.date)});
  return fileObj[0].id;
}
  1. Logger 更改为 console - 截至最近,所有日志都发送到 Stackdriver 服务,因此使用 Logger 没有任何好处(除了使用 console 你让脚本更便携)。

评论

当你声明两个或更多函数在同一个名字下时会发生什么?通常,最后一个声明被执行(基本上,第二个声明覆盖第一个):

function clone(original) {
  return `I am the clone of ${original}`;
}

function clone(cloned) {
  return `I am a clone of ${cloned}'s clone`;
}

const elem = document.querySelector("#cloned");
elem.textContent = clone("Gary");
<h2 id="cloned"></h2>