我正在处理 Excel 电子表格,并且必须仅使用一种类型的公式来处理大量数据。由于在公式中唯一必要的更改涉及字母,我想知道是否有一种方法可以制作一个程序,按照 Excel 列顺序(A、B、C...Z;AA、AB、AC... AZ;BA、BB、BC...BZ)。
就我而言,我需要每次将字母增加 5 个,因此这是我试图获取的代码:
#include <iostream>
using namespace std;
int main() {
char x = 'B';
char y = 'E';
for (int z = 1; z < 2255; z++) {
cout << "=SUMPRODUCT(SUBTOTAL(4,OFFSET(" << x << "1:" << y << "1,ROW(" << x << "1:" << x << "100)-ROW(" << x << "1),)))" << endl;
x = x + 5;
y= y + 5;
}
return 0;
}
当然它不会工作,因为它超过了“z”,但是仍然有办法做到这一点吗?
一般解决方案描述
解决方案一:创建 base-26 系统本身:
假设您有 26 个字母。首先我们来制作 26 进制。我们对每个数字使用 1 个字节。我们创建一个数字数组,然后当相加超过 26 时有时需要进行调整。
假设你当前的数字是25。我们添加7,然后我们需要处理溢出,假设最大256(1字节),我们的数字限制是26。因此调整将是256-26=230
。 (我们在短(16 位)上进行此计算,因此我们在26+7=33 -> 33+230=263
。因此,高字节将为 1,低字节将为 7。)
计算出溢出阈值(高于 1)后,我们可以将其添加到下一个数字,并在发生溢出时执行相同的操作。
最后,为了显示,我们只需向两个字节中的每一个添加 65 ('A')。我们的最后一个字节将以 '\0' 空终止,因此我们可以将其转换为字符串。
解决方案2执行所有计算,然后将其转换为 26 基数:
在这种情况下,
number/26 = x
and
remainder r1 = (number%26)
我们将 r1 存储到一个字节中。
x/26 = x1
and
remainder r2 = (x%26)
我们将 r2 存储到下一个字节。
x1/26 = x2
and
remainder r3 = (x%26)
我们将 r3 存储到下一个字节。我们得到一个字符串r3 r2 r1 '\0'
然后为每个字节添加 65 个“A”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)