Google 脚本运行但得到 'do not have permission to call setValues' 作为函数返回
Google Script runs but get 'do not have permission to call setValues' returned as function
在 google sheet 中,我试图将结果数组 return 转换为具有单个自定义函数的单元格数组。很像“=IMPORT...”或“=QUERY”本机函数。感谢用户 Bardy and this ,我开发了以下脚本。
function asset() {
var s = SpreadsheetApp.getActiveSpreadsheet()
var ss = s.getActiveSheet()
var sc = ss.getActiveCell()
var items = [{Description:'Well',ItemId:'1'},
{Description:'House',ItemId:'2'}];
var outputRows = []
var headings = ["Description","ItemId"]
items.forEach(function(item){
outputRows.push(headings.map(function(heading){
return item[heading] || '';
}));
});
if (outputRows.length){
outputRows.unshift(headings);
SpreadsheetApp.getActiveSheet().getRange(1,1,outputRows.length,outputRows[0].length).setValues(outputRows);
}
}
当我 运行 它时,它就像一个魅力,但如果我尝试从价差 sheet 调用该函数,我会得到恶毒的
'ERROR:You do not have permission to call setValues (line 18).'
我浏览了博客并检查了几乎所有的帮助文件,但有些东西没有连接。我认为这与我尝试激活细胞的方式有关,但我错过了什么?
请注意,我知道类似的帖子 "No Permission to call setValues() - Google Apps Script, JSON data [duplicate]"
(标记为 的重复项“无权在 Google Apps 脚本中调用 msgBox
“) 但是我相信我的应用程序有点不同。我试图允许最终用户根据输入公式的位置将结果放在 sheet 中的任何位置。
我认为这与我尝试激活细胞的方式有关。我似乎无法弄清楚如何使它相对于输入公式的位置。我错过了什么?
当您从脚本编辑器 运行 函数时,您可以使用函数 .setValues()
。但是,当您将函数用作自定义函数时,您只能为具有自定义函数的单元格或其相邻单元格设置值。 Ruben 的 answer 总结了使用自定义函数时如何设置值。
与您的情况类似,您只是 return 数组而不是使用 setValues()
。
像这样:
function asset() {
var s = SpreadsheetApp.getActiveSpreadsheet()
var ss = s.getActiveSheet()
var sc = ss.getActiveCell()
var items = [{Description:'Well',ItemId:'1'},
{Description:'House',ItemId:'2'}];
var outputRows = []
var headings = ["Description","ItemId"]
items.forEach(function(item){
outputRows.push(headings.map(function(heading){
return item[heading] || '';
}));
});
if (outputRows.length){
outputRows.unshift(headings);
return outputRows
}
}
在 google sheet 中,我试图将结果数组 return 转换为具有单个自定义函数的单元格数组。很像“=IMPORT...”或“=QUERY”本机函数。感谢用户 Bardy and this
function asset() {
var s = SpreadsheetApp.getActiveSpreadsheet()
var ss = s.getActiveSheet()
var sc = ss.getActiveCell()
var items = [{Description:'Well',ItemId:'1'},
{Description:'House',ItemId:'2'}];
var outputRows = []
var headings = ["Description","ItemId"]
items.forEach(function(item){
outputRows.push(headings.map(function(heading){
return item[heading] || '';
}));
});
if (outputRows.length){
outputRows.unshift(headings);
SpreadsheetApp.getActiveSheet().getRange(1,1,outputRows.length,outputRows[0].length).setValues(outputRows);
}
}
当我 运行 它时,它就像一个魅力,但如果我尝试从价差 sheet 调用该函数,我会得到恶毒的
'ERROR:You do not have permission to call setValues (line 18).'
我浏览了博客并检查了几乎所有的帮助文件,但有些东西没有连接。我认为这与我尝试激活细胞的方式有关,但我错过了什么?
请注意,我知道类似的帖子 "No Permission to call setValues() - Google Apps Script, JSON data [duplicate]" (标记为 的重复项“无权在 Google Apps 脚本中调用 msgBox “) 但是我相信我的应用程序有点不同。我试图允许最终用户根据输入公式的位置将结果放在 sheet 中的任何位置。
我认为这与我尝试激活细胞的方式有关。我似乎无法弄清楚如何使它相对于输入公式的位置。我错过了什么?
当您从脚本编辑器 运行 函数时,您可以使用函数 .setValues()
。但是,当您将函数用作自定义函数时,您只能为具有自定义函数的单元格或其相邻单元格设置值。 Ruben 的 answer 总结了使用自定义函数时如何设置值。
与您的情况类似,您只是 return 数组而不是使用 setValues()
。
像这样:
function asset() {
var s = SpreadsheetApp.getActiveSpreadsheet()
var ss = s.getActiveSheet()
var sc = ss.getActiveCell()
var items = [{Description:'Well',ItemId:'1'},
{Description:'House',ItemId:'2'}];
var outputRows = []
var headings = ["Description","ItemId"]
items.forEach(function(item){
outputRows.push(headings.map(function(heading){
return item[heading] || '';
}));
});
if (outputRows.length){
outputRows.unshift(headings);
return outputRows
}
}