如何通过 Google Docs 计算(搜索)跨多个工作表的特定文本?
How to count (Search) for specific text across multiple sheets via Google Docs?
目前我正在使用以下公式搜索和计算给定文本在给定单元格中的使用次数:
=COUNTIF(Sheet1!G3:G1151, "COMPLETE")
知道如何对多张纸使用相同的公式吗?
类似于以下内容:
=COUNTIF(Sheet1, Sheet2!G3:G1151, "COMPLETE")
感谢您的帮助
如果您要查找的 sheet 很多,并且要避免为每个 sheet 重复多次公式,您可以使用 custom function改为在 Google Apps 脚本中创建。为此,请按照下列步骤操作:
- 在您的传播sheet、select 工具 > 脚本编辑器 中打开绑定到您的文件的脚本。
- 在脚本编辑器中复制此函数,并保存项目:
function COUNTMANYSHEETS(sheetNames, range, text) {
sheetNames = sheetNames.split(',');
var count = 0;
sheetNames.forEach(function(sheetName) {
var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
var values = sheet.getRange(range).getValues();
values.forEach(function(row) {
row.forEach(function(cell) {
if (cell.indexOf(text) !== -1) count++;
});
});
});
return count;
};
- 现在,如果您返回到您的点差sheet,您可以像使用任何其他函数一样使用此函数。您只需提供一个包含所有 sheet 名称的字符串,由代码中指定的分隔符(在此示例中为逗号)分隔,另一个包含您要查找的范围,以及您想要的文本查找,如您在此处所见,例如:
=COUNTMANYSHEETS("Sheet1,Sheet2,Sheet3", "G3:G1151", "COMPLETE")
备注:
- 请务必提供 sheet 名称,这些名称由
sheetNames = sheetNames.split(',');
中指定的分隔符分隔,不要有其他任何内容(逗号后的空格等)。
- 请务必在引号中提供范围 (
"G3:G1151"
)。否则,该函数会将其解释为与指定范围对应的值数组,您将无法在其他 sheet 中查找值。
- 在此示例中,代码查找字符串
COMPLETE
,并且区分大小写。要使其不区分大小写,您可以使用 toUpperCase() or toLowerCase().
- 如果您想在传播 sheet 中查找所有 sheet,您可以修改您的函数,使其只接受
range
和 text
作为参数,并通过 SpreadsheetApp.getActive().getSheets();
. 获取所有 sheets
参考:
希望对您有所帮助。
目前我正在使用以下公式搜索和计算给定文本在给定单元格中的使用次数:
=COUNTIF(Sheet1!G3:G1151, "COMPLETE")
知道如何对多张纸使用相同的公式吗?
类似于以下内容:
=COUNTIF(Sheet1, Sheet2!G3:G1151, "COMPLETE")
感谢您的帮助
如果您要查找的 sheet 很多,并且要避免为每个 sheet 重复多次公式,您可以使用 custom function改为在 Google Apps 脚本中创建。为此,请按照下列步骤操作:
- 在您的传播sheet、select 工具 > 脚本编辑器 中打开绑定到您的文件的脚本。
- 在脚本编辑器中复制此函数,并保存项目:
function COUNTMANYSHEETS(sheetNames, range, text) {
sheetNames = sheetNames.split(',');
var count = 0;
sheetNames.forEach(function(sheetName) {
var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
var values = sheet.getRange(range).getValues();
values.forEach(function(row) {
row.forEach(function(cell) {
if (cell.indexOf(text) !== -1) count++;
});
});
});
return count;
};
- 现在,如果您返回到您的点差sheet,您可以像使用任何其他函数一样使用此函数。您只需提供一个包含所有 sheet 名称的字符串,由代码中指定的分隔符(在此示例中为逗号)分隔,另一个包含您要查找的范围,以及您想要的文本查找,如您在此处所见,例如:
=COUNTMANYSHEETS("Sheet1,Sheet2,Sheet3", "G3:G1151", "COMPLETE")
备注:
- 请务必提供 sheet 名称,这些名称由
sheetNames = sheetNames.split(',');
中指定的分隔符分隔,不要有其他任何内容(逗号后的空格等)。 - 请务必在引号中提供范围 (
"G3:G1151"
)。否则,该函数会将其解释为与指定范围对应的值数组,您将无法在其他 sheet 中查找值。 - 在此示例中,代码查找字符串
COMPLETE
,并且区分大小写。要使其不区分大小写,您可以使用 toUpperCase() or toLowerCase(). - 如果您想在传播 sheet 中查找所有 sheet,您可以修改您的函数,使其只接受
range
和text
作为参数,并通过SpreadsheetApp.getActive().getSheets();
. 获取所有 sheets
参考:
希望对您有所帮助。