Shu*_*a16 5 google-sheets google-apps-script
我想在自定义函数中使用公式,例如:
function myFunction(range, value) {
var countNumber = COUNTIF(range; value); // COUNTIF is a formula that can be used in the spreadsheet
if (countNumber > 0) {
return "RESULT";
} else {
return "OTHER RESULT";
}
}
Run Code Online (Sandbox Code Playgroud)
进而:
=MYFUNCTION(A1:A5,"VALUETOTEST")
我想简化一个巨大的公式:
就像是:
=IF(SUM(COUNTIFS(G182:G186;"ERROR";H182:H186;"62");COUNTIFS(G182:G186;"ERROR";H182:H186;"ALL"))>0;"ERRO";IF(SUM(COUNTIFS(G182:G186;"RETEST";H182:H186;"62");COUNTIFS(G182:G186;"RETEST";H182:H186;"TODOS"))>0;"RETEST";IF(COUNTIF(G182:G186;"UNIMPLEMENTED")>0;"UNIMPLEMENTED";"SOLVED")))
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以通过三种方式执行这些操作。
在您需要的范围内将工作表公式添加到工作表本身。然后使用您的 GAS 函数从结果单元格(无论您将其设置为写入的位置)读取数据。然后,您可以使用结果执行进一步处理。
使用您的 GAS 函数将工作表公式写入工作表。然后使用更多的 GAS 来读取该结果并处理数据。可以在此处找到此方法:https : //developers.google.com/apps-script/reference/spreadsheet/range#setFormula(String)
您可以使用 GAS 创建自定义工作表公式,然后在工作表中使用。然后 GAS 可以读取该结果并处理信息。这将需要对 JS 整体进行一些研究,以了解如何重新创建、组合和执行您需要工作表中的数据执行的操作。
您可以在此处找到制作自定义公式的指南:https : //developers.google.com/apps-script/guides/sheets/functions
以及这里的 JS 指南:http : //www.w3schools.com/js/default.asp
W3 Schools 有一个非常全面的 JS 指南。GAS 使用所有原生 JS 方法,因为它是一个 JS 编码环境。查看 GAS 参考,了解更多关于可以执行您需要的 GAS 特定方法的信息。
如果您需要检查条件和/或遍历行,请尝试以下操作:
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var range = sheet.getRange(startRow, startColumn, numRows, numColumns);
var values = range.getValues(); //This is a 2D array; iterate appropriately
for (i = 0; i < values.length; i++) {
if (values[i] == conditionToCheck) {
//perform code..OR
//continue; <- This works to skip the row if the condition is met
} else {
//perform alternate code if condition is not met
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如我所提到的,.getValues()创建一个二维数组。如果您需要遍历列和行,则需要 2 个for()循环,如下所示:
for (i = 0; i < values.length; i++) { //iterates through the rows
for(j = 0; j < values[i].length; j++) { //iterates through the columns in that current row
Run Code Online (Sandbox Code Playgroud)
值得一提的是 GAS 如何处理二维数组。values[i][j]表示i有多少行和j列。你可以像这样想象:
values = [[A1, B1, C1],[A2, B2, C2],[A3, B3, C3]]
这是一个数组数组,其中外部数组是行数组,而内部是该行中按列排列的单元格值数组。
这就是我解决问题的方法。我感谢帮助我取得这一成果的人们!
// Like COUNTIFS
var countConditionals = function(cells, condition1, condition2) {
var count = 0;
for (i = 0; i < cells.length; i++) {
if (cells[i][0] == condition1 && cells[i][1] == condition2) {
count++;
}
}
return count;
}
// Like COUNTIF
var countConditional = function(cells, condition) {
var count = 0;
for (i = 0; i < cells.length; i++) {
if (cells[i][0] == condition) {
count++;
}
}
return count;
}
//Whole Formula
function verificaStatus(cells, db) {
const ERROR = "ERROR";
const ALL = "ALL";
const RETEST = "RETEST";
const NOTYET = "UNIMPLEMENTADED";
const SOLVED = "SOLVED";
var countErrors = countConditionals(cells, ERROR, db);
var countErrorsAll = countConditionals(cells, ERROR, ALL);
var sumErrors = countErrors + countErrorsAll;
if (sumErrors > 0) {
return ERROR;
} else {
var retest = countConditionals(cells, RETEST, db);
var retestAll = countConditionals(cells, RETEST, db);
var sumRetest = retest + retestAll;
if (sumRetest > 0) {
return RETEST;
} else {
var countNonCreated = countConditional(cells, NOTYET);
if (countNonCreated > 0) {
return NOTYET;
}
}
}
return SOLVED;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12080 次 |
| 最近记录: |