Google apps script 从谷歌表单内容链接到谷歌硬盘
我完全沉浸在代码问题中,似乎无法让它正常工作。我希望这群睿智的谷歌应用程序脚本天才能有所帮助 第一:我的谷歌硬盘使用以下文件夹结构(字母表中的每个字母都有第一个子文件夹,然后是每个事物的第二个子文件夹,例如Google apps script 从谷歌表单内容链接到谷歌硬盘,google-apps-script,Google Apps Script,我完全沉浸在代码问题中,似乎无法让它正常工作。我希望这群睿智的谷歌应用程序脚本天才能有所帮助 第一:我的谷歌硬盘使用以下文件夹结构(字母表中的每个字母都有第一个子文件夹,然后是每个事物的第二个子文件夹,例如 /Clients /A /Albert, Bob (1-15-0003) Re Matter /B /Bork, Mat (1-54-0003) Re Other Matter 我有一个Google Sheets文档,其中有各种各样的工作表,每个工作表在各自的单元格G2中引用
/Clients
/A
/Albert, Bob (1-15-0003) Re Matter
/B
/Bork, Mat (1-54-0003) Re Other Matter
我有一个Google Sheets文档,其中有各种各样的工作表,每个工作表在各自的单元格G2中引用不同的物质编号。我想要一个脚本,可以自动搜索我的Google驱动器中的第二个子文件夹,并创建指向该文件夹的超链接
我的代码如下,但遗憾的是它不起作用。它似乎找不到子文件夹
function SearchFolder() {
// Searches Google Drive for the folder for the Active Sheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var searchTerm = ss.getRange('G2').getValue();
var Folders = DriveApp.searchFolders("title contains '"+searchTerm.replace("'","\'")+"' and trashed = false and hidden = false");
var Folder = Folders.next();
sheet.getRange('G2').setFormula("=HYPERLINK(\""+Folder.getUrl()+"\",\""+searchTerm+"\")");
}
预期结果是,如果我当前工作表的G2为1-15-0003,那么G2将被一个超链接替换,该超链接的Google驱动器URL指向/a/Albert的文件夹ID,Bob(1-15-0003)Re Matter
感谢您的帮助。交互式目录树
这些函数与JStree JQuery插件一起工作,生成一个目录交互树。您必须添加两个Id,即数据存储文件夹的Id和树中根目录的Id。如果您想要一个webapp,这里还有一个doGet函数。我为您提供了几个文件对于html以及一些集成到遍历代码中的html代码来说,这是一个相当复杂的项目。可能有更好的方法来实现这一点
数据存储文件夹中的文件:TopToBodyWeb
<html>
<head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/themes/default/style.min.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/jstree.min.js"></script>
<style>.file{color:#d81840;}.contrls{padding:10px 10px 10px 10px;}.timestmp {width: 200px;margin-left:5px;padding:10px 0px 5px 50px;background-color:rgba(121, 25, 0, 0.36);color:white;}i.jstree-icon.jstree-themeicon{display:none;}</style>
<script type="text/javascript">
$(function () { $('#selector').jstree({"core" : {"themes":{"variant":"large"}},"plugins" : [ "wholerow"]});
});
</script>
</head>
<body><div id="selector"><ul>
这是traverse.gs:
function runtraverseFolder()
{
var dirlist = loadDirlist();
var controls = '<div class="cntrls"><input type="button" value="Exit" onClick="google.script.host.close()" /> \
<input type="button" value="Delete Cached Listing & Start Over" onClick="google.script.run.clearDirlist();" /></div><br />';
var toptobody = loadFile('TopToBody');
var bodytoend = loadFile('BodyToEnd');
if(dirlist)
{
dispStatus('Stored MyDrive Directory List', toptobody + GStorage + bodytoend, 600, 500);
}
else
{
GStorage ='';
GFlag = 0;
traverseFolder(DriveApp.getFolderById('ThisistheIDoftheRootTraverseFolder'));
saveDirlist();
dispStatus('Current MyDrive Directory Listing', toptobody + GStorage + bodytoend, 600, 500);
}
}
function getStoredDirectory()
{
loadDirlist();
var toptobody = loadFile('TopToBodyWeb');
var bodytoend = loadFile('BodyToEndWeb');
return toptobody + GStorage + bodytoend;
}
function traverseFolder(folderObj)
{
glevel++;
if(glevel < 2)
{
GStorage += '<li class="fldr" id="fd' + glii++ + '"' + 'data-jstree=\'{ "selected" : true, "opened" : true }\'' + '><a href="https://drive.google.com/open?id='+ folderObj.getId() +'" target="_blank" >Folder: ' + folderObj.getName() + '</a></span>';
//GStorage += '<li class="fldr" id="fd' + glii++ + '"' + 'data-jstree=\'{ "selected" : true, "opened" : true }\'' + '><a href="#" target="_blank" title="Dummy Link can not get file listing" >Folder: ' + folderObj.getName() + '</a></span>';
}
else
{
GStorage += '<li class="fldr" id="fd' + glii++ + '"><a href="https://drive.google.com/open?id=' + folderObj.getId() +'" target="_blank" >Folder: ' + folderObj.getName() + '</a></span>';
//GStorage += '<li class="fldr" id="fd' + glii++ + '"><a href="#" target="_blank" title="Dummy Link can not get file listing." >Folder: ' + folderObj.getName() + '</a></span>';
}
GStorage += '<ul id="ul'+ guli++ +'">';
var subs = folderObj.getFolders();
var files = folderObj.getFiles();
if(files)
{
//GStorage += '<ul id="ul'+ guli++ +'">';
while(files.hasNext())
{
var fi = files.next();;
GStorage += '<li class="file" id="fi' + glii++ + '"><a href="https://drive.google.com/open?id='+ fi.getId() +'" target="_blank" title="Right Click to Open File in new tab." >File: ' + fi.getName() + '</a></span>';
}
//GStorage += '</ul>';
}
while (subs.hasNext())
{
traverseFolder(subs.next());
}
GStorage += '</ul></li>';
glevel--;
}
function saveDirlist()
{
var filename = 'CurrentDirectoryListing';
var fldr = DriveApp.getFolderById(folderID);
var fldrname = fldr.getName();
var file = fldr.getFilesByName(filename);
var targetFound = false;
var timeStamp = '<div class="timestmp">' + Utilities.formatDate(new Date(), "GMT-7", "yyyy-MM-dd HH:mm:ss") + '</div>';
while(file.hasNext())
{
var fi = file.next();
var target = fi.getName();
if(target == filename)
{
targetFound = true;
fi.setContent(timeStamp + GStorage);
SpreadsheetApp.getUi().alert('Directory Listing was updated using: ' + target); }
}
if(!targetFound)
{
var created = fldr.createFile('CurrentDirectoryListing',timeStamp + GStorage);
if(created)
{
//SpreadsheetApp.getUi().alert( 'Directory Listing was stored here: ' + fldr.getName() + '/' + created.getName());
}
else
{
SpreadsheetApp.getUi().alert('Unknown Error: Directory List was not stored');
}
}
}
function loadDirlist()
{
var filename = 'CurrentDirectoryListing';
var fldr = DriveApp.getFolderById(folderID);
var file = fldr.getFilesByName(filename);
var targetFound = false;
while(file.hasNext())
{
var fi = file.next();
var target = fi.getName();
if(target == filename)
{
targetFound = true;
GStorage = fi.getBlob().getDataAsString();
//SpreadsheetApp.getUi().alert('Directory Listing was retreived from: ' + fldr.getName() + '/' + target);
}
}
return targetFound;
}
function clearDirlist()
{
var filename = 'CurrentDirectoryListing';
var fldr = DriveApp.getFolderById(folderID)
var file = fldr.getFilesByName(filename);
var targetFound = false;
while(file.hasNext())
{
var fi = file.next();
var target = fi.getName();
if(target == filename)
{
targetFound = true;
fldr.removeFile(fi);
//SpreadsheetApp.getUi().alert('File: ' + filename + ' was removed from: ' + fldr.getName() + '/' + target);
}
}
return targetFound;
}
This is utility.gs:
function dispStatus(title,html,width,height)
{
// Display a modeless dialog box with custom HtmlService content.
var title = typeof(title) !== 'undefined' ? title : 'No Title Provided';
var width = typeof(width) !== 'undefined' ? width : 250;
var height = typeof(height) !== 'undefined' ? height : 300;
var html = typeof(html) !== 'undefined' ? html : '<p>No html provided.</p>';
var htmlOutput = HtmlService
.createHtmlOutput(html)
.setWidth(width)
.setHeight(height);
SpreadsheetApp.getUi().showModelessDialog(htmlOutput, title);
}
函数runtraverseFolder()
{
var dirlist=loadDirlist();
风险值控制\
; var toptobody=loadFile('toptobody'); var bodytoend=loadFile('bodytoend'); if(dirlist) { dispStatus('存储的MyDrive目录列表',toptobody+GStorage+bodytoend,600500); } 其他的 { GStorage=''; GFlag=0; traverseFolder(DriveApp.getFolderById('ThisIstheidOfRootTraverseFolder'); saveDirlist(); dispStatus('当前MyDrive目录列表',toptobody+GStorage+bodytoend,600500); } } 函数getStoredDirectory() { loadDirlist(); var toptobody=loadFile('TopToBodyWeb'); var bodytoend=loadFile('BodyToEndWeb'); 返回toptobody+G存储+Body ToEnd; } 函数遍历文件夹(folderObj) { glevel++; 如果(glevel<2) { GStorage+='
- ;
var subs=folderObj.getFolders();
var files=folderObj.getFiles();
如果(文件)
{
//GStorage+='
- ; } //GStorage+='
- ;
while(files.hasNext())
{
var fi=files.next();;
GStorage++'
作为跟进,我认为我的错误在getvalue命令中。我的代码现在正在工作(显然已经更改了相关单元格,并假设shee
</ul></div></body></html>
</ul></div><div class="cntrls"><input type="button" value="Exit" onClick="google.script.host.close();" />
<input type="button" value="Delete Cache & Exit" onClick="google.script.run.clearDirlist();google.script.host.close();" /></div><br /></body></html>
var GStorage = '';
var folderID = "TheIDofDataStorageFolderGoesHere";
var guli = 0;
var glii = 0;
var glevel = 0;
function onOpen()
{
var ui = SpreadsheetApp.getUi();
ui.createMenu('My Tools')
.addItem('Dir MyDrive','runtraverseFolder')
.addToUi();
}
function runFile()
{
var file = loadFile();
if(file)
{
dispStatus('Stored MyDrive Directory List', file, 1000, 600);
}
else
{
SpreadsheetApp.getUi().alter('File not found in function runfile');
}
}
function loadFile(filename)
{
var filename = (typeof(filename) !== 'undefined')? filename : 'UploadFile';
var fldr = DriveApp.getFolderById(folderID);
var file = fldr.getFilesByName(filename);
var s = '';
while(file.hasNext())
{
var fi = file.next();
var target = fi.getName();
if(target == filename)
{
s = fi.getBlob().getDataAsString();
}
}
return s;
}
function delFile(filename)
{
var filename = (typeof(filename) !== 'undefined')? filename : 'UploadFile';
var fldr = DriveApp.getFolderById(folderID)
var file = fldr.getFilesByName(filename);
var targetFound = false;
while(file.hasNext())
{
var fi = file.next();
var target = fi.getName();
if(target == filename)
{
targetFound = true;
fldr.removeFile(fi);
SpreadsheetApp.getUi().alert('File: ' + filename + ' was removed from: ' + fldr.getName() + '/' + target);
}
}
return targetFound;
}
function doGet()
{
var output=HtmlService.createHtmlOutput(getStoredDirectory());
return output.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
function runtraverseFolder()
{
var dirlist = loadDirlist();
var controls = '<div class="cntrls"><input type="button" value="Exit" onClick="google.script.host.close()" /> \
<input type="button" value="Delete Cached Listing & Start Over" onClick="google.script.run.clearDirlist();" /></div><br />';
var toptobody = loadFile('TopToBody');
var bodytoend = loadFile('BodyToEnd');
if(dirlist)
{
dispStatus('Stored MyDrive Directory List', toptobody + GStorage + bodytoend, 600, 500);
}
else
{
GStorage ='';
GFlag = 0;
traverseFolder(DriveApp.getFolderById('ThisistheIDoftheRootTraverseFolder'));
saveDirlist();
dispStatus('Current MyDrive Directory Listing', toptobody + GStorage + bodytoend, 600, 500);
}
}
function getStoredDirectory()
{
loadDirlist();
var toptobody = loadFile('TopToBodyWeb');
var bodytoend = loadFile('BodyToEndWeb');
return toptobody + GStorage + bodytoend;
}
function traverseFolder(folderObj)
{
glevel++;
if(glevel < 2)
{
GStorage += '<li class="fldr" id="fd' + glii++ + '"' + 'data-jstree=\'{ "selected" : true, "opened" : true }\'' + '><a href="https://drive.google.com/open?id='+ folderObj.getId() +'" target="_blank" >Folder: ' + folderObj.getName() + '</a></span>';
//GStorage += '<li class="fldr" id="fd' + glii++ + '"' + 'data-jstree=\'{ "selected" : true, "opened" : true }\'' + '><a href="#" target="_blank" title="Dummy Link can not get file listing" >Folder: ' + folderObj.getName() + '</a></span>';
}
else
{
GStorage += '<li class="fldr" id="fd' + glii++ + '"><a href="https://drive.google.com/open?id=' + folderObj.getId() +'" target="_blank" >Folder: ' + folderObj.getName() + '</a></span>';
//GStorage += '<li class="fldr" id="fd' + glii++ + '"><a href="#" target="_blank" title="Dummy Link can not get file listing." >Folder: ' + folderObj.getName() + '</a></span>';
}
GStorage += '<ul id="ul'+ guli++ +'">';
var subs = folderObj.getFolders();
var files = folderObj.getFiles();
if(files)
{
//GStorage += '<ul id="ul'+ guli++ +'">';
while(files.hasNext())
{
var fi = files.next();;
GStorage += '<li class="file" id="fi' + glii++ + '"><a href="https://drive.google.com/open?id='+ fi.getId() +'" target="_blank" title="Right Click to Open File in new tab." >File: ' + fi.getName() + '</a></span>';
}
//GStorage += '</ul>';
}
while (subs.hasNext())
{
traverseFolder(subs.next());
}
GStorage += '</ul></li>';
glevel--;
}
function saveDirlist()
{
var filename = 'CurrentDirectoryListing';
var fldr = DriveApp.getFolderById(folderID);
var fldrname = fldr.getName();
var file = fldr.getFilesByName(filename);
var targetFound = false;
var timeStamp = '<div class="timestmp">' + Utilities.formatDate(new Date(), "GMT-7", "yyyy-MM-dd HH:mm:ss") + '</div>';
while(file.hasNext())
{
var fi = file.next();
var target = fi.getName();
if(target == filename)
{
targetFound = true;
fi.setContent(timeStamp + GStorage);
SpreadsheetApp.getUi().alert('Directory Listing was updated using: ' + target); }
}
if(!targetFound)
{
var created = fldr.createFile('CurrentDirectoryListing',timeStamp + GStorage);
if(created)
{
//SpreadsheetApp.getUi().alert( 'Directory Listing was stored here: ' + fldr.getName() + '/' + created.getName());
}
else
{
SpreadsheetApp.getUi().alert('Unknown Error: Directory List was not stored');
}
}
}
function loadDirlist()
{
var filename = 'CurrentDirectoryListing';
var fldr = DriveApp.getFolderById(folderID);
var file = fldr.getFilesByName(filename);
var targetFound = false;
while(file.hasNext())
{
var fi = file.next();
var target = fi.getName();
if(target == filename)
{
targetFound = true;
GStorage = fi.getBlob().getDataAsString();
//SpreadsheetApp.getUi().alert('Directory Listing was retreived from: ' + fldr.getName() + '/' + target);
}
}
return targetFound;
}
function clearDirlist()
{
var filename = 'CurrentDirectoryListing';
var fldr = DriveApp.getFolderById(folderID)
var file = fldr.getFilesByName(filename);
var targetFound = false;
while(file.hasNext())
{
var fi = file.next();
var target = fi.getName();
if(target == filename)
{
targetFound = true;
fldr.removeFile(fi);
//SpreadsheetApp.getUi().alert('File: ' + filename + ' was removed from: ' + fldr.getName() + '/' + target);
}
}
return targetFound;
}
This is utility.gs:
function dispStatus(title,html,width,height)
{
// Display a modeless dialog box with custom HtmlService content.
var title = typeof(title) !== 'undefined' ? title : 'No Title Provided';
var width = typeof(width) !== 'undefined' ? width : 250;
var height = typeof(height) !== 'undefined' ? height : 300;
var html = typeof(html) !== 'undefined' ? html : '<p>No html provided.</p>';
var htmlOutput = HtmlService
.createHtmlOutput(html)
.setWidth(width)
.setHeight(height);
SpreadsheetApp.getUi().showModelessDialog(htmlOutput, title);
}
function SearchFolder() {
// Searches Google Drive for the folder for the Active Sheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var searchTerm = ss.getSheetName();
var Folders = DriveApp.searchFolders("title contains '"+searchTerm.replace("'","\'")+"' and trashed = false and hidden = false");
var Folder = Folders.next();
sheet.getRange('K6').setFormula("=HYPERLINK(\""+Folder.getUrl()+"\",\""+searchTerm+"\")");
}