2016-02-17 24 views
2

我的生产数据库中有表情符号出现问题。由于它在生产中,我所有的东西都是自动生成的excel电子表格(.xls),每隔几万行就有一次。我使用Google表格来解析此问题,以便我可以轻松分享结果。如何计算具有表情符号的列中的所有单元格?

可以使用什么公式计算包含表情符号的列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 | 
+----------------------------------+---+ 

回答

1

编辑由本CR Leggiero:

=COUNTA(FILTER(A2:A6;REGEXMATCH(A2:A6;"[^\x{0}-\x{F7}]"))) 
+0

那不匹配数字,逗号,句号,等等? –

+0

是的,它会的。这必须是正则表达式的一部分:[^ A-Za-z。,0-9] –

+0

好吧,把你的正则表达式改成更通用的东西,比如'[^ \ x {0} - \ x {F7}]'我会接受这个答案 –

1

你不能用常规公式提取表情符号,因为谷歌电子表格使用重量轻RE2正则表达式引擎,缺乏many features ,包括寻找表情符号所必需的。您需要做的是创建自定义公式。选择工具菜单,然后脚本编辑器...。在脚本编辑器中,添加以下内容:

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}]

+0

为什么使用'[ab-yz] | [12-89]'模式而不是'[ab-yz12-89]'? –

+0

另外,我在这里看到很多操作。这种表现如何与其他答案相匹配?我检查的电子表格有成千上万行。 –

+0

这将取决于你需要什么。如果你只需要一个近似计数并且不介意带有外部名称的误报,那么简单的正则表达式就可以工作。如果你只想计算表情符号,但你想要表现,那么你需要改变自定义公式为更具体的,以便您可以使用像'= count_not_emoji(A3:A)' – daniel

1

这应该工作:

=arrayformula(countif(REGEXMATCH(A2:A6,"[^a-zA-Z\d\s:]"),true)) 
+0

感谢您的简单答案!我会比较这三个表现,回到你们都。 –

相关问题