在Google电子表格中查找和删除所有表情符号

时间:2017-03-09 22:43:58

标签: google-apps-script google-sheets emoji

我有一个包含数千个单元格的Google电子表格,每个单元格都填充了许多不同表情符号的字符串。

参赛作品示例:

“哈哈”,“哈哈”,“火”,“太棒了!”,“很高兴明天见!”, “こんにちは”,“你好”

但是我想要删除所有的表情符号,是否有可以运行的搜索功能/我可以运行的一些电子表格代码使文件没有表情符号?

3 个答案:

答案 0 :(得分:2)

使用正则表达式清理

我没有时间做整件事,但这会给你一个开始。我用一个单元格清理了所有东西。

var sht = SpreadsheetApp.getActiveSheet();
  var text = sht.getActiveCell().getValue();
  var cleantext = text.replace(/[^\s\w]/g,'');//replace everything that's not whitespace or word characters with null
  sht.getActiveCell().setValue(cleantext);

我使用您提供的线作为测试数据。不可否认,它需要一些调整,因为它摆脱了一些标点符号。

这好一点。

function test()
{
  var sht = SpreadsheetApp.getActiveSheet();
  var text = sht.getActiveCell().getValue();
  var cleantext = text.replace(/[^\s\w"!,]/g,'');//added "!,
  sht.getActiveCell().setValue(cleantext);

}

因此,当您运行它时,您可能需要添加更多字符以不替换列表。而已。

我有一份费用报告,用于收集不同类别的费用,我喜欢制作饼图,以帮助我全面了解我的资金流向。我使用这个数组公式来帮助我将信息收集到有用的类别中。

=ArrayFormula(IF(Row(C:C)=1,"Title",IF(LEN(C:C),IF(REGEXMATCH(C:C,"(?i)(string1|string2|string3|string4)"),D:D,""),)))

正则表达式提供了一个或函数,用于为我想要收集到这些类别的费用列表中显示的意外项目添加其他匹配项。如果您需要另一个匹配的术语,您只需进入该公式并添加另一个术语,如下所示

(string1|string2|string3|string4||string5)

字符串被替换为没有引号的实际条款,除非它们在搜索目标中有引号。

答案 1 :(得分:1)

以下是一些代码,它通过一列数据并从每个单元格中删除表情符号。

您必须将Your Sheet Tab Name替换为代码应处理的工作表标签名称。此代码目前仅处理一列数据。整列值将在一次写入操作中写回到工作表。任何5个字符或更多字符的字符代码都被认为是表情符号。

首先在几行数据上测试它。

function killEmojies() {
  var arrayThisRow,columnOfValues,columnToRemoveEmojiesFrom,firstTwoChar,
      i,innerArray,j,L,newCellContent,outerArray,
      ss,sh,
      targetSheet,thisCell,thisCellChar,thisCellVal,thisCharCode,thisCharCodeLength;

  columnToRemoveEmojiesFrom = 1;
  outerArray = [];

  ss = SpreadsheetApp.getActiveSpreadsheet()
  sh = ss.getSheetByName("Your Sheet Tab Name Here");
  targetSheet = ss.getSheetByName("Your Sheet Tab Name Here");

  columnOfValues = sh.getRange(1, columnToRemoveEmojiesFrom,sh.getLastRow(),1).getValues(); 
  L = columnOfValues.length;
  Logger.log('L: ' + L);

  for (i=0;i<L;i++) {

    thisCell = columnOfValues[i];//Get inner array
    thisCellVal = thisCell[0];//Get first element of inner array

    Logger.log(thisCellVal)
    Logger.log('typeof thisCellVal: ' + typeof thisCellVal)

    newCellContent = "";//Reset for every cell
    innerArray = [];//Reset for every row loop

    if (typeof thisCellVal !== 'string') {//This spreadsheet cell contains something
      //other than text
      innerArray.push(thisCellVal);
    } else {
      for (j=0;j<thisCellVal.length;j++) {//Loop through every character in the cell
        thisCellChar = thisCellVal[j];
        thisCharCode = thisCellChar.charCodeAt(0);//Character code of this character
        thisCharCodeLength = thisCharCode.toString().length;

        Logger.log('typeof thisCharCodeLength: ' + typeof thisCharCodeLength);
        Logger.log('this val: ' + thisCharCode);
        Logger.log('thisCharCodeLength: ' + thisCharCodeLength);
        Logger.log(thisCharCodeLength < 5);

        if (thisCharCodeLength === 5) {
          firstTwoChar = thisCharCode.toString().slice(0,2);
          Logger.log('firstTwoChar: ' + firstTwoChar)

        }

        if (thisCharCodeLength > 4 && (firstTwoChar === "54" || firstTwoChar === "55" || firstTwoChar === "56")) {
          continue;//exclude character codes that are 5 or more characters long
          //and start with 54 or 55
        }
        newCellContent = newCellContent + thisCellChar;

      }

      innerArray.push(newCellContent);
    }

    outerArray.push(innerArray);
  }

  targetSheet.getRange(1, columnToRemoveEmojiesFrom,outerArray.length,1).setValues(outerArray);
}

答案 2 :(得分:0)

假设您的所有文本字符串都是单个单词,后跟空格,然后是表情符号,则可以使用公式

=LEFT(A1,(FIND(" ",A1,1)-1))

这将仅返回单元格的文本内容(本例中为A1)。 如果您的所有数据都在一个列中,您只需向下拉,这将适用于您的所有数据。