是否有一种方法可以计算复杂的Google文档(多选项卡)中的公式数
我已经使用诸如ARRAYFORMULA等函数重新编写了一个旧的模板,我非常想确定复杂度的降低--公式的数目是这个的一个代理。最初有成千上万的逐行、逐列复制/粘贴calcs。
发布于 2020-03-31 00:21:52
答案:
您可以在所有工作表中的所有单元格中获取所有公式,如果单元格以=
字符开头,则将其添加到计数器中。
代码:
function getAllFormulae() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var count = 0;
for (var i = 0; i < ss.length; i++) {
var currSheetValues = ss[i].getDataRange().getFormulas();
for (var j = 0; j < currSheetValues.length; j++) {
for (var k = 0; k < currSheetValues[j].length; k++) {
if (currSheetValues[j][k].startsWith("=") == 1) {
count++
}
}
}
}
return count;
}
发布于 2020-03-31 14:41:57
我相信您希望检索Google电子表格中所有工作表中的单元格数,包括公式。如果我的理解是正确的,我想建议使用谷歌应用程序脚本。那么这个示例脚本如何?
我认为,当提出各种方法时,它们可能对用户有用。因此,我想提出以下两个示例脚本。
模式1:
在此模式中,从活动电子表格中检索所有工作表,并从每个工作表中检索包含公式的单元格数。为了计算元素的数量,二维数组是扁平的。
示例脚本:
function myFunction() {
const res = SpreadsheetApp
.getActiveSpreadsheet()
.getSheets()
.reduce((n, s) => n += s.getDataRange().getFormulas().flat().filter(String).length, 0);
console.log(res)
}
模式2:
在此模式中,使用TextFinder检索公式。在这种情况下,可以从活动电子表格中的所有工作表中检索所有公式,而无需使用循环过程。搜索的详细过程在Google端的内部服务器上运行。在我的环境中,该模式的流程成本低于模式1,在相同条件下,模式2的成本约为模式1的1/5。
示例脚本:
function myFunction() {
const res = SpreadsheetApp
.getActiveSpreadsheet()
.createTextFinder("^\\=")
.matchFormulaText(true)
.useRegularExpression(true)
.findAll().length;
console.log(res)
}
注意:
参考文献:
发布于 2020-03-31 04:09:31
使用getFormulas
获取所有公式并计数不为空的所有元素:
const getTotalFormulasCount = () =>
console.log(getNumFormulas_(SpreadsheetApp.getActive().getSheets()));
/**
* @param {GoogleAppsScript.Spreadsheet.Sheet[]|string[][]|string[]} arr Array of sheets or 1D or 2D array of formulas
* @returns {number} count of formulas present in arr
*/
const getNumFormulas_ = arr =>
arr.reduce(
(count, el) =>
count +
(Array.isArray(el) //if el is array, recurse
? getNumFormulas_(el)
: el.getRange //if el is sheet, recurse over it's formulas
? getNumFormulas_(el.getDataRange().getFormulas())
: Number(el !== '')),
0
);
https://stackoverflow.com/questions/60945361
复制相似问题