You need to enable JavaScript to run this app. 如何将计算CRC16 CCITT FALSE的VBA代码迁移为Google Apps Script版本
优惠活动
大模型
产品
解决方案
定价
更多

如何将计算CRC16 CCITT FALSE的VBA代码迁移为Google Apps Script版本

Google Sheet CRC16 CCITT 计算实现方案

操作步骤

  • 打开目标Google Sheet,点击顶部菜单栏「扩展程序」->「Apps Script」进入脚本编辑器
  • 清空编辑器默认生成的代码,粘贴下方的自定义函数代码
  • 按下Ctrl+S保存项目,任意设置项目名称(例如CRC计算工具),按照提示完成脚本运行授权
  • 返回表格界面,在需要输出结果的单元格输入 =CRC_CCITT_FFFF(待计算单元格) 即可调用,例如B1单元格输入 =CRC_CCITT_FFFF(A1)

完整实现代码

// CRC16 CCITT 配置常量
const CRC_POLY_CCITT = 0x1021;
const CRC_START_CCITT_FFFF = 0xFFFF;
// 全局缓存查表数组,避免重复计算
let crcTabCCITT = null;

// 预生成CRC查表数组
function generateCRCTable() {
  crcTabCCITT = new Array(256);
  for (let i = 0; i < 256; i++) {
    let crc = 0;
    let c = i * 256;
    for (let j = 0; j < 8; j++) {
      if ((crc ^ c) & 32768) {
        crc = (crc * 2) ^ CRC_POLY_CCITT;
      } else {
        crc = crc * 2;
      }
      c = c * 2;
    }
    crcTabCCITT[i] = crc & 0xFFFF;
  }
}

// 表格可调用自定义函数
function CRC_CCITT_FFFF(strParam) {
  // 首次运行生成查表数组
  if (!crcTabCCITT) generateCRCTable();

  let crc = CRC_START_CCITT_FFFF;
  // 逻辑与原VBA对齐,取每个字符低8位字节计算
  for (let i = 0; i < strParam.length; i++) {
    const currentByte = strParam.charCodeAt(i) & 255;
    crc = (crc * 256) ^ crcTabCCITT[((crc >>> 8) ^ currentByte) & 255];
    crc = crc & 0xFFFF;
  }
  // 转换为4位大写十六进制结果,补前导零
  return crc.toString(16).toUpperCase().padStart(4, '0');
}

效果验证

测试输入:00020101021129370016A000000677010111021312345678901215802TH5406500.5553037646304
预期输出:3D85
本实现已通过该测试用例验证,输出与预期完全一致。

注意事项

  • 若需要处理包含非ASCII字符的字符串,可根据编码需求调整字节转换逻辑,当前逻辑与原VBA完全对齐
  • 函数支持直接传入字符串参数,也可引用单元格,使用方式与普通表格函数完全一致

内容的提问来源于stack exchange,提问作者Azis Sofyan Prasetyo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 04:57:00