使用 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
实现此目标的最佳方法是什么?
电子表格输出:
URL1
和 URL2
是 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;
}
问题
以相同的名称声明了两个函数
解决方案
一步一步:
- 删除其中一个函数(它们在用法上是相同的)
- 让剩下的一个使用传入的参数:
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;
}
- 将
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>
我想知道:是否可以在 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
实现此目标的最佳方法是什么?
电子表格输出:
URL1
和 URL2
是 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;
}
问题
以相同的名称声明了两个函数
解决方案
一步一步:
- 删除其中一个函数(它们在用法上是相同的)
- 让剩下的一个使用传入的参数:
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;
}
- 将
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>