You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Sheets中通过AppScript解码Cloudflare加密邮箱?

解决Google Apps Script中Cloudflare加密邮箱解码的错误问题

错误原因

你遇到的TypeError: sheetS.getRange(...).cfDecodeEmail is not a function是因为错误地将自定义函数当作Range对象的内置方法调用。cfDecodeEmail是你定义的普通函数,不能直接通过Sheet的Range对象调用,需要手动遍历A列的每个值,逐个解码后再写入B列。

修正后的代码

function Decode() {
  // 打开目标表格
  var sss = SpreadsheetApp.openById("1fDXv1L1YmXzbUXJbzGE6suc5HWToHlUuO-zBzVZDcX0");
  var sheetS = sss.getSheetByName("Guide");
  
  // 获取A列所有值(二维数组格式),过滤空行
  var encodedValues = sheetS.getRange('A1:A').getValues().filter(row => row[0] !== "");
  
  // 定义Cloudflare邮箱解码函数
  function cfDecodeEmail(encodedString) {
    var email = "", r = parseInt(encodedString.substr(0, 2), 16), n, i;
    for (n = 2; encodedString.length - n; n += 2){
      i = parseInt(encodedString.substr(n, 2), 16) ^ r;
      email += String.fromCharCode(i);
    }
    return email;
  }

  // 遍历加密值,生成解码后的二维数组
  var decodedEmails = encodedValues.map(row => {
    return [row[0] ? cfDecodeEmail(row[0]) : ""];
  });

  // 将解码结果写入B列对应位置
  if (decodedEmails.length > 0) {
    sheetS.getRange(1, 2, decodedEmails.length, 1).setValues(decodedEmails);
  }
}

关键改进点

  • 修正调用逻辑:不再试图给Range对象绑定自定义函数,改为遍历数组逐个处理加密值
  • 性能优化:一次性读取所有值、处理后一次性写入,减少与Sheets服务的交互次数(这是Apps Script核心性能优化技巧)
  • 空值处理:过滤空行避免无效解码,同时仅更新有数据的对应行,不会覆盖B列原有有效内容

内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 00:25:19