var folderId = 'folderId';
function listFolders(){
getFolderTree(folderId, false);
};
function listAll(){
getFolderTree(folderId, true);
};
function getFolderTree(folderId, listAll) {
try {
var parentFolder = DriveApp.getFolderById(folderId);
var file, data, sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Resources");
sheet.clear('A1');
sheet.appendRow(["Name"]);
getChildFolders(parentFolder.getName(), parentFolder, data, sheet, listAll);
} catch (e) {
Logger.log(e.toString());
}
};
function getChildFolders(parentName, parent, data, sheet, listAll) {
var childFolders = parent.getFolders();
while (childFolders.hasNext()) {
var childFolder = childFolders.next();
// Logger.log("Folder Name: " + childFolder.getName());
data = [
childFolder.getName()
];
sheet.appendRow(data);
var files = childFolder.getFiles();
while (listAll & files.hasNext()) {
var childFile = files.next();
// Logger.log("File Name: " + childFile.getName());
data = [
parentName + "/" + childFolder.getName() + "/" + childFile.getName(),
childFile.getName()
];
// Write
sheet.appendRow(data);
}
getChildFolders(parentName + "/" + childFolder.getName(), childFolder, data, sheet, listAll);
}
};
function appendToColumn() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Resources");
var data = "End";
//Get the column where you want to append the data
var range = sheet.getRange("A1:A").getValues().flat();
var row = range.filter(String).length;
Logger.log(row);
sheet.getRange(row+1,2).setValue(data);
}
我的预期流程如下图所示:但我还没有找到可安装触发器或简单触发器的全面答案。
目标2
function button { [script above] }
并完成它。我之前读过
function executeFunctionByName(func) {
this[func]();
}
function getProjectFunctionNames() {
const vfilesA=getGlobal('sbfiles').split(',');
const scriptId="1JO1n6EpiKlORws9J-icjffuKdGX6l-4vgYmRJtUTdg88efz7hwatg_09";
const url = "https://script.googleapis.com/v1/projects/" + scriptId + "/content?fields=files(functionSet%2Cname)";
const options = {"method":"get","headers": {"Authorization": "Bearer " + ScriptApp.getOAuthToken()}};
const res = UrlFetchApp.fetch(url, options);
let html=res.getContentText();
//SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(html), "Project Functions");
let data=JSON.parse(res.getContentText());
let funcList=[];
let files=data.files;
files.forEach(function(Obj){
if(vfilesA.indexOf(Obj.name)!=-1) {
if(Obj.functionSet.values) {
Obj.functionSet.values.forEach(function(fObj){
funcList.push(fObj.name);
});
}
}
});
//SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(funcList.join(', ')), "Project Functions");
return funcList;
}
html:
<br /><input type="button" value="run1()" onClick="execFunc1();" /><select id="func1"></select>
<script>
$(function(){
google.script.run
.withSuccessHandler(function(vA){
let idA=["func1","func2","func3","func4"];
idA.forEach(function(id){
updateSelect(vA,id);
});
})
.getProjectFunctionNames();
}
function updateSelect(vA,id){
var id=id || 'sel1';
var select = document.getElementById(id);
select.options.length = 0;
vA.unshift("");
for(var i=1;i<vA.length;i++){
select.options[i] = new Option(vA[i],vA[i]);
}
}
function execFunc1() {
var funcname=$('#func1').val();
google.script.run.executeFunctionByName(funcname);
}
</script>
演示: