google-apps-script - 如何使用自定义函数在谷歌电子表格列中返回数组?
问题描述
我正在 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;
}
我不确定为什么它没有在单元格中显示任何数据。我希望它返回所有这些值,满足我在应用公式的单元格中的条件。
解决方案
尝试:
fildata.push( [ datarange[j][0] * 100 ] ); // in square brackets
因为输出需要是列表列表,即二维数组。
只会datarange[j]
给你整行。
推荐阅读
- php - HLS 转换上的错误 FFMpeg Laravel 过滤器
- amazon-redshift - DBT模型挂
- android - C:\platform-tools>adb install FirstGo.apk Performing Streamed Install Error: Requires new sdk version #29 (current version is #25)]
- reactjs - 无法在 React Web 应用程序中基于来自 axios 调用的道具渲染图像
- latex - 在 \edef 的替换文本中使用 \dots 似乎会破坏 \dots 宏以供以后使用
- autohotkey - 不同发布时间的不同动作
- angular - 以编程方式设置 mat-select 默认选项
- python - 如何在for循环中将字典键转换为列名和值作为行
- python - 格式问题在熊猫中分类时间
- javascript - vuejs - 表单数据复选框发送 [object] 而不是 id