我的生产数据库中的表情符号有问题。由于它已投入生产,我从中得到的只是一个自动生成的 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}]")))
这应该有效:
=arrayformula(countif(REGEXMATCH(A2:A6,"[^a-zA-Z\d\s:]"),true))
您无法使用常规公式提取表情符号,因为 Google Spreadsheet 使用轻量级 re2 正则表达式引擎,该引擎缺乏 许多功能,包括查找表情符号所需的功能。
您需要做的是创建自定义公式。选择工具菜单,然后选择脚本编辑器...。在脚本编辑器中,添加以下内容:
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}]
取决于您的用途。
如果只是为了跟踪/没有链接脚本或流到新表 -> 您可以使用“插入”>“数据透视表”功能,这使您可以更轻松地过滤和直观地恢复您拥有的内容,而无需使用公式。
正如此评论所说 为什么谷歌表格另存为 PDF 不会在单元格中显示表情符号?,在使用表情符号和正则表达式时,谷歌表格可能会变得非常棘手,除此之外,谷歌表格还使用正则表达式 SRE,这是一种不同的方法正则表达式引擎。