javascript - 使用脚本编辑器将谷歌表格中的表情符号 unicode 插入电子邮件

标签 javascript email google-apps-script google-sheets

我正在尝试使用脚本编辑器从谷歌表格中获取一些文本以发送电子邮件。该文本包含一个 Unicode 表情符号,但是,当发送电子邮件时,它会打印纯文本,而不是显示 Unicode 表情符号。\

我在电子邮件中看到的内容:
&#9889 some text here &#9889
我希望在电子邮件中看到的内容:

'⚡这里有一些文字⚡'

我在谷歌表格中保存的文本:
⚡ some text here ⚡
我用来从谷歌表格中获取文本的脚本。
var emailText = myTemplate.getRange(x, 9).getValue();
我在这里做错了什么?

最佳答案

  • 有文字⚡ some text here ⚡在电子表格的一个单元格中。
  • 您想通过从电子表格检索文本并从 ⚡ some text here ⚡ 解码来发送电子邮件至⚡ some text here ⚡ .
  • 您想使用 Google Apps 脚本实现此目的。

  • 如果我的理解是正确的,这个答案怎么样?请认为这只是几个答案之一。

    问题:

    有文字⚡ some text here ⚡的情况下在单元格中,当使用 setValue() 从单元格中检索值时和 setValues() , ⚡ some text here ⚡作为文本值检索。这样,当此值作为电子邮件发送时,⚡用作文本。所以⚡需要解码为 .

    解决方案:

    在这里,作为几种解决方案之一,我从 ⚡ 转换至使用以下流程。作为示例,假设 ⚡ some text here ⚡正在放入单元格“A1”。
  • 从电子表格的单元格中检索值。
  • 检索 9889来自 ⚡ .
  • 解码9889的字符码与 String.fromCharCode() .
  • 借此,9889转换为 .
  • 将解码后的文本作为电子邮件发送。

  • 模式一:

    在此模式中,通过从 ⚡ 转换来发送电子邮件。至 .在运行脚本之前,请输入 ⚡ some text here ⚡到事件工作表的单元格“A1”。

    示例脚本:

    在此脚本中,⚡转换为 使用 String.fromCharCode() . Google Apps 脚本可以使用此方法。
    var emailAddress = "###";
    
    var sheet = SpreadsheetApp.getActiveSheet();
    var value = sheet.getRange("A1").getValue(); // ⚡  some text here ⚡
    var converted = value.replace(/&#(\w.+?);/g, function(_, p) {return String.fromCharCode(p)}); // ⚡  some text here ⚡
    
    GmailApp.sendEmail(emailAddress, "sample", converted);
    MailApp.sendEmail(emailAddress, "sample", converted);
    
  • 的情况下,可以同时发送GmailApp.sendEmail()MailApp.sendEmail() , 因为版本是 4.0.但是如果你想使用其他较新版本的unicode,我建议使用MailApp.sendEmail() .
  • sinaraheneba's comment 已经提到了这一点.
  • 在此示例脚本中,可以使用小于 Unicode 5.2 的字符。请注意这一点。

  • 模式二:

    在此模式中,我想提出使用较新版本 unicode 字符的示例脚本。在这种情况下,🤖 ( 🤖 ) 使用 Unicode 8.0。在运行脚本之前,请输入 🤖 some text here 🤖到事件工作表的单元格“A1”。

    示例脚本:

    在此脚本中,🤖转换为 🤖使用 String.fromCodePoint()而不是 String.fromCharCode() .遗憾的是,在现阶段,Google Apps Script 无法直接使用此方法。所以使用了polyfill。使用时请运行myFunction() .
    /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */
    if (!String.fromCodePoint) {
      (function() {
        var defineProperty = (function() {
          // IE 8 only supports `Object.defineProperty` on DOM elements
          try {
            var object = {};
            var $defineProperty = Object.defineProperty;
            var result = $defineProperty(object, object, object) && $defineProperty;
          } catch(error) {}
          return result;
        }());
        var stringFromCharCode = String.fromCharCode;
        var floor = Math.floor;
        var fromCodePoint = function() {
          var MAX_SIZE = 0x4000;
          var codeUnits = [];
          var highSurrogate;
          var lowSurrogate;
          var index = -1;
          var length = arguments.length;
          if (!length) {
            return '';
          }
          var result = '';
          while (++index < length) {
            var codePoint = Number(arguments[index]);
            if (
              !isFinite(codePoint) ||       // `NaN`, `+Infinity`, or `-Infinity`
              codePoint < 0 ||              // not a valid Unicode code point
              codePoint > 0x10FFFF ||       // not a valid Unicode code point
              floor(codePoint) != codePoint // not an integer
            ) {
              throw RangeError('Invalid code point: ' + codePoint);
            }
            if (codePoint <= 0xFFFF) { // BMP code point
              codeUnits.push(codePoint);
            } else { // Astral code point; split in surrogate halves
              // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
              codePoint -= 0x10000;
              highSurrogate = (codePoint >> 10) + 0xD800;
              lowSurrogate = (codePoint % 0x400) + 0xDC00;
              codeUnits.push(highSurrogate, lowSurrogate);
            }
            if (index + 1 == length || codeUnits.length > MAX_SIZE) {
              result += stringFromCharCode.apply(null, codeUnits);
              codeUnits.length = 0;
            }
          }
          return result;
        };
        if (defineProperty) {
          defineProperty(String, 'fromCodePoint', {
            'value': fromCodePoint,
            'configurable': true,
            'writable': true
          });
        } else {
          String.fromCodePoint = fromCodePoint;
        }
      }());
    }
    
    function myFunction() {
      var emailAddress = "###";
    
      var sheet = SpreadsheetApp.getActiveSheet();
      var value = sheet.getRange("A1").getValue(); // &#129302;  some text here &#129302;
      var converted = value.replace(/&#(\w.+?);/g, function(_, p) {return String.fromCodePoint(p)}); // 🤖  some text here 🤖
    
      //  GmailApp.sendEmail(emailAddress, "sample", converted); // This cannot be used for Unicode 8.0. https://stackoverflow.com/a/50883782/7108653
      MailApp.sendEmail(emailAddress, "sample", converted);
    }
    
  • 当然,这个示例脚本可以同时用于 Unicode 4.0 和 🤖 Unicode 8.0。

  • 笔记:
  • 我不确定您的整个电子表格和脚本。所以我提出了上面的示例脚本。此解决方法的重点是方法论。所以请根据您的实际情况修改脚本。
  • unescape()也可用于上述情况。但是已经知道这已被弃用。所以我没有提出使用这个的示例脚本。

  • 引用:
  • String.fromCharCode()
  • String.fromCodePoint()
  • unescape()

  • 如果我误解了您的问题并且这不是您想要的结果,我深表歉意。

    关于javascript - 使用脚本编辑器将谷歌表格中的表情符号 unicode 插入电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57847697/

    相关文章:

    javascript - 当且仅当在 FF/Chrome 中调试时,jQuery AJAX 调用才有效

    javascript - Three.js 中几何体的缩放动画

    javascript - 函数中使用 "window.location.href"的两个 URL

    javascript - 获取文本中有多少个 'field' 实例,并将具有相同 'field' 的每个值附加到同一变量

    python - 从命令行访问 gmail 时出现 IMAP 错误

    javascript - 打破数组循环函数(map、forEach 等)的循环

    php - 将 Unicode UTF8 添加到电子邮件

    javascript - Google 应用程序脚本中的 __proto__?

    google-apps-script - 您如何使用 Google Apps 脚本以编程方式更新电子邮件休假回复?

    javascript - 使用 Xml.parse() 删除标签内容与值数组匹配的 html 标签和内容