如何计算一列中包含表情符号的所有单元格?
How do I count all cells in a column that have emoji?
我的生产数据库中的表情符号有问题。由于它正在生产中,我从中得到的只是一个自动生成的 excel 电子表格 (.xls
),偶尔会有数万行。我使用 Google Sheets 来解析它,这样我就可以轻松地分享结果。
我可以使用什么公式来计算第 n 列中包含表情符号的所有单元格的数量?
例如:
Data
+----+-----------------+
| ID | Name |
+----+-----------------+
| 1 | Chad |
+----+-----------------+
| 2 | ✨Darla✨ |
+----+-----------------+
| 3 | John Smith |
+----+-----------------+
| 4 | Austin ⚠️ Powers |
+----+-----------------+
| 5 | Missus |
+----+-----------------+
Totals
+----------------------------------+---+
| People named Chad | 1 |
+----------------------------------+---+
| People with emoji in their names | 3 |
+----------------------------------+---+
Ben C. R. Leggiero 编辑:
=COUNTA(FILTER(A2:A6;REGEXMATCH(A2:A6;"[^\x{0}-\x{F7}]")))
您无法使用正则公式提取表情符号,因为 Google 电子表格使用轻量级 re2 正则表达式引擎,缺少 many features,包括查找表情符号所需的引擎。
您需要做的是创建自定义公式。 Select 工具 菜单,然后是 脚本编辑器...。在脚本编辑器中,添加以下内容:
function find_emoji(s) {
var re = /[\u1F60-\u1F64]|[\u2702-\u27B0]|[\u1F68-\u1F6C]|[\u1F30-\u1F70]|[\u2600-\u26ff]|[\uD83C-\uDBFF\uDC00-\uDFFF]+/i;
if (s instanceof Array) {
return s.map(function(el){return el.toString().match(re);});
} else {
return s.toString().match(re);
}
}
保存脚本。返回您的电子表格,然后测试您的公式 =find_emoji(A1)
我的测试结果如下:
| Missus | |
| Austin ⚠️ Powers | ⚠ |
| ✨Darla✨ | ✨ |
| joke | |
而且,要计算没有表情符号的条目,您可以使用此公式:
=countif( arrayformula(isblank( find_emoji(filter(F2:F,not(isblank(F2:F)))))), FALSE)
编辑
我错了。您可以使用常规公式来提取表情符号。正则表达式语法是 [\x{1F300}-\x{1F64F}]|[\x{2702}-\x{27B0}]|[\x{1F68}-\x{1F6C}]|[\x{1F30}-\x{1F70}]|[\x{2600}-\x{26ff}]|[\x{D83C}-\x{DBFF}\x{DC00}-\x{DFFF}]
这应该有效:
=arrayformula(countif(REGEXMATCH(A2:A6,"[^a-zA-Z\d\s:]"),true))
我的生产数据库中的表情符号有问题。由于它正在生产中,我从中得到的只是一个自动生成的 excel 电子表格 (.xls
),偶尔会有数万行。我使用 Google Sheets 来解析它,这样我就可以轻松地分享结果。
我可以使用什么公式来计算第 n 列中包含表情符号的所有单元格的数量?
例如:
Data
+----+-----------------+
| ID | Name |
+----+-----------------+
| 1 | Chad |
+----+-----------------+
| 2 | ✨Darla✨ |
+----+-----------------+
| 3 | John Smith |
+----+-----------------+
| 4 | Austin ⚠️ Powers |
+----+-----------------+
| 5 | Missus |
+----+-----------------+
Totals
+----------------------------------+---+
| People named Chad | 1 |
+----------------------------------+---+
| People with emoji in their names | 3 |
+----------------------------------+---+
Ben C. R. Leggiero 编辑:
=COUNTA(FILTER(A2:A6;REGEXMATCH(A2:A6;"[^\x{0}-\x{F7}]")))
您无法使用正则公式提取表情符号,因为 Google 电子表格使用轻量级 re2 正则表达式引擎,缺少 many features,包括查找表情符号所需的引擎。
您需要做的是创建自定义公式。 Select 工具 菜单,然后是 脚本编辑器...。在脚本编辑器中,添加以下内容:
function find_emoji(s) {
var re = /[\u1F60-\u1F64]|[\u2702-\u27B0]|[\u1F68-\u1F6C]|[\u1F30-\u1F70]|[\u2600-\u26ff]|[\uD83C-\uDBFF\uDC00-\uDFFF]+/i;
if (s instanceof Array) {
return s.map(function(el){return el.toString().match(re);});
} else {
return s.toString().match(re);
}
}
保存脚本。返回您的电子表格,然后测试您的公式 =find_emoji(A1)
我的测试结果如下:
| Missus | |
| Austin ⚠️ Powers | ⚠ |
| ✨Darla✨ | ✨ |
| joke | |
而且,要计算没有表情符号的条目,您可以使用此公式:
=countif( arrayformula(isblank( find_emoji(filter(F2:F,not(isblank(F2:F)))))), FALSE)
编辑
我错了。您可以使用常规公式来提取表情符号。正则表达式语法是 [\x{1F300}-\x{1F64F}]|[\x{2702}-\x{27B0}]|[\x{1F68}-\x{1F6C}]|[\x{1F30}-\x{1F70}]|[\x{2600}-\x{26ff}]|[\x{D83C}-\x{DBFF}\x{DC00}-\x{DFFF}]
这应该有效:
=arrayformula(countif(REGEXMATCH(A2:A6,"[^a-zA-Z\d\s:]"),true))