下面是一个 GAS,它从文件夹中提取文件名和 google 驱动器超链接并将它们粘贴到 google 表格中。
现在我想根据文件名(使用不同的气体准确提取文件名)创建指向谷歌表格中选定范围的谷歌驱动器超链接,并保持其单元格位置。有人可以在这里补充一下或者指导我参考吗?
要求:
- 选择一系列单元格并在文件夹中递归搜索“匹配”文件名
- 我有文件夹和子文件夹,因此脚本必须导航/搜索多层文件夹。
- 文件夹的深度约为3-4层
以下是当前工作的GAS
function myFunction() {
var ss=SpreadsheetApp.getActiveSpreadsheet();
var s=ss.getActiveSheet();
var c=s.getActiveCell();
var fldr=DriveApp.getFolderById("<id>");
var files=fldr.getFiles();
var names=[],f,str;
while (files.hasNext()) {
f=files.next();
str='=hyperlink("' + f.getUrl() + '","' + f.getName() + '")';
names.push([str]);
}
s.getRange(c.getRow(),c.getColumn(),names.length).setFormulas(names);
}
电子表格样本:
- There are the folder names and filenames on a sheet in the Spreadsheet.
- 这些文件夹和文件位于特定文件夹中。
- 每个名称在所有值中都是唯一的名称。
- 您选择范围。例如,图像电子表格中的“A1:D12”。
- 您想要检索所有文件名并使用文件名搜索文件。
- 您想要将检索到的值替换为文件超链接的公式。
从您的回复和补充信息中,我可以像上面那样理解。如果我的理解是正确的,那么这个示例脚本怎么样?请将此视为几个可能答案之一。
修改后的脚本:
设置文件夹ID后,请选择范围(例如“A1:D12”)并运行以下功能myFunction()
。这样,文件名就被替换为超链接的公式。
function myFunction() {
var folderId = "###"; // Please set the folder ID.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();
var c = s.getActiveRange()
var fldr = DriveApp.getFolderById(folderId);
var values = c.getValues();
var getFiles = function getFiles(folder) {
var folders = folder.getFolders();
while(folders.hasNext()) {
var fol = folders.next();
// for (var i = 0; i < values.length; i++) {
// for (var j = 0; j < values[i].length; j++) {
// values[i][j] = values[i][j] == fol.getName() ? ('=hyperlink("' + fol.getUrl() + '","' + fol.getName() + '")') : values[i][j];
// }
// }
getFiles(fol);
}
var files = folder.getFiles();
while (files.hasNext()) {
var f = files.next();
for (var i = 0; i < values.length; i++) {
for (var j = 0; j < values[i].length; j++) {
values[i][j] = values[i][j] == f.getName() ? ('=hyperlink("' + f.getUrl() + '","' + f.getName() + '")') : values[i][j];
}
}
}
}(fldr);
if (values.length > 0) {
s.getRange(c.getRow(), c.getColumn(), values.length, values[0].length).setValues(values);
}
}
Note:
-
当使用上面注释的以下行时,也会放置文件夹的超链接。
for (var i = 0; i < values.length; i++) {
for (var j = 0; j < values[i].length; j++) {
values[i][j] = values[i][j] == fol.getName() ? ('=hyperlink("' + fol.getUrl() + '","' + fol.getName() + '")') : values[i][j];
}
}
如果单元格值和子文件夹中存在相同的文件名和文件夹名称,则需要从单元格值解析文件夹和文件的逻辑。在你的附加图像中,我无法理解其中的逻辑。这是我技术不好造成的。我对此表示歉意。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)