【发布时间】:2019-08-28 20:15:44
【问题描述】:
我正在 Google 电子表格中创建一个自定义函数,该函数过滤列中的数据,具有百分比值。这个想法是检查介于 1-5% 之间的值的总和是否小于 15%。一旦找到,将所有此类百分比值填充在单个列中,无论我在何处应用此公式。
我已经编写了这段代码,当我调试它时,它会产生正确的数组值,但是,它不会在单元格中填充任何内容。
/**
* Get the Filtered Data
*
* @return The range based on filters .
* @customfunction
*/
function GetFilteredData() {
try {
var sum = 0;
var actsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Utilization");
var range = actsheet.getRange('M3:M').getValues();
var Alast = range.filter(String).length;
var filteredrange = [];
for(var i=5;i>1;i--)
{
var cell = actsheet.getRange("P1");
cell.setFormula("=SUM(FILTER(M3:M,M3:M<"+i+"%))")
sum = actsheet.getRange('P1').getValue();
if(sum <0.15)
{
filteredrange = findFilteredRange(range, i, Alast);
break;
}
}
return filteredrange;
}
catch(err) {
Logger.log(err);
}
}
function findFilteredRange(datarange, criteria, lastcell){
var fildata = [];
for(var j = 0; j<lastcell; j++) {
if(datarange[j] <= criteria/100) {
fildata.push(datarange[j]*100);
}
}
return fildata;
}
我不确定为什么它没有在单元格中显示任何数据。我希望它返回所有这些值,满足我在应用公式的单元格中的条件。
【问题讨论】:
-
检查变量的类型... 将 JavaScript
Array对象与 JavaScriptdouble对象相乘是什么意思?您还需要确保刷新写入缓冲区,以便在读取之前计算您在脚本中写入的内容 -
为什么不尝试直接从脚本设置单元格值?
-
@tehhowch 我是这个脚本的新手,我将它们相乘以获得百分比形式的结果。你能描述一下你所说的第二行是什么意思吗?
-
@AMolina 你的意思是定义硬编码范围,然后为每个单元格设置值?
-
@Damien 您可以使用
setValues()方法(Documentation here)来更改整个范围内的值,您将一个与范围匹配的二维数组传递给它,并且值在工作表,它可以是一种更舒适的使用方式。
标签: google-apps-script google-sheets