【发布时间】:2013-04-10 15:05:43
【问题描述】:
我正在构建一个 Google 电子表格,我将在其中将一堆数据输入到该电子表格中,然后在另一个工作表上,我想从中提取统计数据。我很难正确计算这些值。
我想要完成的事情 - 构建一个函数,我可以添加到任何单元格中,通过根据函数中的目标/参数计算重复值来获取特定列的统计信息。
例子:
表 1 在 E 列中包含我需要计算的数据(包含 1 或 2 个字母以指示状态。 表 2 是我将提取所有统计数据的地方。 我添加了一个这样的函数:=getData("A")
函数本身已经指向 sheet1 和 E 列。函数在这里说的是,“我希望你提取 E 列中的所有数据并告诉我有多少单元格被标记为 A”,然后给出我是伯爵。
我有大约 5 个不同的值,我会在这里独立搜索。我们会说 A、B、C、D 和 E。所以如果我去搜索 C,我会使用:=getData("C")
将统计信息拉到统计表上的另一个单元格中
到目前为止我所得到的(不起作用) - 我对这些东西的编码很粗略,所以我还在学习很多东西。到目前为止,这是我正在尝试的:
function getData(target) {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SHEET1");
var lrow = ss.getLastRow();
var r = ss.getRange(2, 5, lrow, 1);
var data = r.getValues();
var count;
for (var i = 0; i < lrow ; i++) {
var count = 1;
for (var j = 0; j < i; i++) {
if (data[j][0].value(target) == data[i][0].value(target)) {
count++;
}
}
return (count);
}
}
我也试过: if (data.value() == target) { count++; }
但这似乎也没有帮助。我究竟做错了什么?要么我没有正确计算和/或没有提取数据来正确计算它。我已经搜索了很多帖子,但似乎无法汇总我需要的内容。
感谢任何人提供的任何帮助。谢谢。
已解决的代码(感谢@ScampMichael) - 这种细微的变化实际上允许我使用 =getData("Example1","Example2") 格式搜索多个值并计算总数:
function getData(target1, target2) {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SHEET1");
var lrow = ss.getLastRow();
var r = ss.getRange(2, 5, lrow-1, 1); // lrow-1 to not count header
var data = r.getValues();
var count = 0; // 0 must be declared here or you'll get error: Overflow on the spreadsheet
for (var i=0; i<data.length; i++) {
if (data[i][0] == target1) { // can repeat this part depending how many values you want to search for
count++;
}
if (data[i][0] == target2) {
count++;
}
}
return (count);
}
【问题讨论】:
-
我想您已经考虑过使用标准的电子表格功能?很容易进行计数和求和(如果您的计数或求和是直截了当的)。
-
我已经考虑过了。这种情况下的问题是,我将获得的每个统计数据的复杂性都需要在我的工作表上放一堆电子表格代码。通过构建一个函数,虽然比单次使用的电子表格函数复杂一点,但我实际上只是简单的公式方面的事情。这也将允许我的经理根据他们将来要查找的内容或我们稍后添加其他状态来修改功能。