自定义函数 JSA_A_ATOB 对base64编码的字符串进行解码
function JSA_A_ATOB(base64) { //base64解码
base64 = base64.valueOf();
const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
// 1. 预处理:移除非法字符并补足填充符
let cleanInput = base64.replace(/[^A-Za-z0-9\+\/]/g, '');
const padCount = (4 - (cleanInput.length % 4)) % 4;
cleanInput = cleanInput.padEnd(cleanInput.length + padCount, '=');
// 2. 构建字符索引映射表(加速查找)
const charMap = {};
for (let i = 0; i < base64Chars.length; i++) {
charMap[base64Chars[i]] = i;
}
// 3. 解码核心逻辑(使用普通数组存储字节)
const byteArray = [];
for (let i = 0; i < cleanInput.length; i += 4) {
// 3.1 获取4字符对应的6比特值
const a = charMap[cleanInput[i]];
const b = charMap[cleanInput[i + 1]];
const c = charMap[cleanInput[i + 2]];
const d = charMap[cleanInput[i + 3]];
// 3.2 重组24比特数据
const triple = (a << 18) | (b << 12) | (c << 6) | d;
// 3.3 提取3字节(动态处理填充符)
byteArray.push((triple >> 16) & 0xFF);
if (cleanInput[i + 2] !== '=') byteArray.push((triple >> 8) & 0xFF);
if (cleanInput[i + 3] !== '=') byteArray.push(triple & 0xFF);
}
// 4. 将字节数组转为字符串(兼容多字节字符) Latin1编码(仅ASCII)
return String.fromCharCode.apply(null, byteArray);
}插入函数对话框、函数参数对话框:
加载宏文件function Workbook_Open(){}中添加以下代码。
Application.MacroOptions("JSA_A_ATOB", "对base64编码的字符串进行解码。", undefined, undefined, undefined, undefined, 14, undefined, undefined, undefined, ["base64字符串。"]);