Google Sheets生成12元组全组合报错,求分批输出方案
分批生成指定范围的12位组合方案
首先明确:36个字符(a-z+0-9)生成12位组合的总数量为 36^12 ≈ 4.7×10^18,这个量级远超任何表格工具的承载上限,不可能生成全部组合,仅能按需生成指定小范围的组合。以下是Google Sheets中实现分批生成、拆分到多表的具体方案:
方法一:Google Apps Script自定义函数(推荐)
通过脚本将序号转换为对应36进制字符,按需生成指定区间的组合,灵活性更高且支持更大范围。
- 打开表格,点击「扩展程序」→「Apps 脚本」
- 粘贴以下代码:
function GENERATECOMBINATIONS(startNum, endNum, charRange) { const chars = charRange.flat().filter(c => c !== ""); const base = chars.length; const result = []; if (base === 0 || startNum > endNum) return []; for (let num = startNum; num <= endNum; num++) { let n = num - 1; // 从0开始计数匹配进制转换 let combo = ""; // 逐位生成12位组合,不足位用列表首个字符补全 for (let i = 0; i < 12; i++) { const remainder = n % base; combo = chars[remainder] + combo; n = Math.floor(n / base); } result.push(combo.split("")); // 拆分字符为列 } return result; }
- 保存脚本后回到表格,按需求调用:
- 生成第1-20000条组合(A1:A36为字符列表):
=GENERATECOMBINATIONS(1, 20000, A1:A36) - 生成第20001-40000条组合:
=GENERATECOMBINATIONS(20001, 40000, A1:A36)
- 生成第1-20000条组合(A1:A36为字符列表):
方法二:公式实现小范围生成(仅适合极小批量)
若不想用脚本,可结合进制转换逻辑编写公式,但仅支持几千条以内的范围(超过后易超时报错):
=ARRAYFORMULA( LET( seq, SEQUENCE(20000), n, seq - 1, col1, INDEX(A:A, FLOOR(n/(36^11)) + 1), col2, INDEX(A:A, FLOOR(MOD(n,36^11)/(36^10)) + 1), col3, INDEX(A:A, FLOOR(MOD(n,36^10)/(36^9)) + 1), col4, INDEX(A:A, FLOOR(MOD(n,36^9)/(36^8)) + 1), col5, INDEX(A:A, FLOOR(MOD(n,36^8)/(36^7)) + 1), col6, INDEX(A:A, FLOOR(MOD(n,36^7)/(36^6)) + 1), col7, INDEX(A:A, FLOOR(MOD(n,36^6)/(36^5)) + 1), col8, INDEX(A:A, FLOOR(MOD(n,36^5)/(36^4)) + 1), col9, INDEX(A:A, FLOOR(MOD(n,36^4)/(36^3)) + 1), col10, INDEX(A:A, FLOOR(MOD(n,36^3)/(36^2)) + 1), col11, INDEX(A:A, FLOOR(MOD(n,36^2)/36) + 1), col12, INDEX(A:A, MOD(n,36) + 1), HSTACK(col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11, col12) ) )
修改SEQUENCE(20000)中的数字即可调整生成条数。
拆分到多个工作表的实现
直接在不同工作表中调用自定义函数,指定不同的序号区间即可:
- 工作表1:
=GENERATECOMBINATIONS(1, 20000, 原表名!A1:A36) - 工作表2:
=GENERATECOMBINATIONS(20001, 40000, 原表名!A1:A36) - 以此类推,每个工作表负责一个批次的组合生成。
内容的提问来源于stack exchange,提问作者Moi sur internet
相关产品推荐
相关产品推荐

