我想从google驱动器中的文件夹中提取所有链接,并写两列,其中一列包含该链接,下一列包含我是google scripting新手的文件名,并编写了以下代码:
function myFunction() {
var ss=SpreadsheetApp.getActiveSpreadsheet();
var s=ss.getActiveSheet();
var c=s.getActiveCell();
var fldr=DriveApp.getFolderById("0B37vVx5p-eGMTmJmTF9JOUwxZnc");
var files=fldr.getFiles();
var names=[],f,str;
while (files.hasNext()) {
f=files.next();
str='=hyperlink("' + f.getUrl() + '")';
names.push([str]);
}
s.getRange(c.getRow(),c.getColumn(),names.length).setFormulas(names);
}
function myFunction() {
var ss=SpreadsheetApp.getActiveSpreadsheet();
var s=ss.getActiveSheet();
var c=s.getActiveCell();
var fldr=DriveApp.getFolderById("0B37vVx5p-eGMTmJmTF9JOUwxZnc");
var files=fldr.getFiles();
var names=[],f,str;
while (files.hasNext()) {
f=files.next();
str='=" + f.getName() + "';
names.push([str]);
}
s.getRange(c.getRow(),c.getColumn(),names.length).setFormulas(names);
}
问题在于,在第一列中写入链接后,它会用第一列中的名称覆盖它。如何指定第二段代码应写入哪一列?
答案 0 :(得分:0)
使用Range.offset
:
返回一个新范围,该范围从该范围偏移给定的行数和列数(可以为负数)。新范围与原始范围相同。
答案 1 :(得分:0)
没有真正的理由将它们分别放在单独的函数中,您可以将它们都推到同一数组中,然后插入到工作表中,下面的代码应该可以满足您的期望:
function getFolders() {
var ss=SpreadsheetApp.getActiveSpreadsheet();
var s=ss.getActiveSheet();
var c=s.getActiveCell();
var fldr=DriveApp.getFolderById("0B37vVx5p-eGMTmJmTF9JOUwxZnc");
var files=fldr.getFiles();
var names=[],f,url,name;
while (files.hasNext()) {
f=files.next();
url='=hyperlink("' + f.getUrl() + '")';
name='="' + f.getName() + '"';
names.push([url,name]);
}
s.getRange(c.getRow(),c.getColumn(),names.length, 2).setFormulas(names);
}
我不得不调整name='="' + f.getName() + '"';
,因为引号不在正确的位置,它是将字符串本身推入数组而不是文件名。
像这样将两个值都推入数组意味着您不需要偏移范围,因为使用setValues()
时数组将跨越2列,因此为什么我必须为{{1 }}中的numColumns
。
答案 2 :(得分:0)
在Google Apps脚本项目中,每个函数应具有唯一的名称,否则,将仅按执行时加载的顺序执行最后一个函数。因此,首先,永远不会编写超链接公式。
另一方面,如a previous answer所述,无需在每列上编写单独的函数,一个函数可以同时填充两列。
在此代码行上:
names.push([str]);
自变量por push
是具有单个值的数组。用包含两个列的值的数组替换此参数。要对您的第一个功能进行最少的更改,请重命名str
变量,为第二列添加第二行代码,并使用正确且唯一的变量名称,即(如上一个答案所示):
url='=hyperlink("' + f.getUrl() + '")';
name='=" + f.getName() + "';
names.push([url,name]);
最后,在最后一条语句中添加列数
s.getRange(c.getRow(),c.getColumn(),names.length, 2).setFormulas(names);
别忘了删除名为myFunction
的第二个函数