Kcv*_*vin 0 worksheet-function microsoft-excel microsoft-excel-2010
我有一个电子表格,我用它来帮助可视化每个 ASCII 字符的字符位图。对于 5x7 字体,我使用 5 个单元格宽(列)和 7 个单元格高(行)。然后我将 8 行列中每个单元格的背景标记为黑色,以表示一个字节的位,其中每一位是一个像素,黑色背景表示一个像素为ON. 然后,我创建一个字节数组,它将作为我的字符表示。对于我想要的每种字体大小,我必须为 95 个字符(ASCII 值)执行此操作。
问题是我必须盯着字符的每一列,确定它的二进制值,然后计算出十六进制值。因此,尝试为 5 宽字符表计算 495 个字节变得乏味。我想知道是否有我可以编写的工作表函数来检查单元格的背景颜色,如果黑色将设置变量的第n位,然后创建下面该列的十六进制值。
TL;DR我没有在 Excel 中编写函数的经验。我正在使用 LCD 屏幕。我有一个电子表格,上面有我所有的字符——其中每个像素ON的背景颜色都是黑色。1 个单元 = 1 位字节。我需要一个函数,它可以根据背景单元格是否为黑色为我提供列的十六进制值。继续插图。
这是我的电子表格中 5x7 字符“A”的示例。*** 表示单元格背景颜色为黑色,否则为白色。(如果需要,向每个背景颜色为黑色的单元格添加诸如单元格值 1 之类的东西不会有问题,以使其成为一个更简单的功能):
____________________
B0| |***|***|***| | (row 0)
|-------------------|
B1|***| | | |***| (row 1)
|-------------------|
B2|***| | | |***| (row 2)
|-------------------|
B3|***|***|***|***|***| (row 3)
|-------------------|
B4|***| | | |***| (row 4)
|-------------------|
B5|***| | | |***| (row 5)
|-------------------|
B6|***| | | |***| (row 6)
|-------------------|
B7|___|___|___|___|___| (row 7)
7E 09 09 09 7E (row 8)
Run Code Online (Sandbox Code Playgroud)
字节数组将是:
byte A[] = { 0x7E, 0x09, 0x09, 0x09, 0x7E };
Run Code Online (Sandbox Code Playgroud)
伪代码版本(一栏):
char hex = 0x00;
for(int bI = 0; bI < 8; bI++)
{
if(cell[bI].BackgroundColor == Black)
{
hex |= (0x01 << bI;
}
}
row8.Text = hex.ToString("X2");
Run Code Online (Sandbox Code Playgroud)
您可以添加一列来指示位位置并添加1s(位)的数量。对于下面的示例,我所做的是:
为我的 5x7 范围创建一个条件格式,如果我进入1一个单元格,它会变成黑色(我使用橙色所以我可以看到 1)。

在字符的左侧添加一列以标记十进制中的位位置1、2、4、8、16、32、64 (参见 B 列)。
要获得十六进制值,请在底部使用此公式:
=DEC2HEX(SUMPRODUCT($B$2:$B$8,D2:D8),2)
在哪里:
如果您不想创建额外的列,请将位位置合并到公式中,如下所示:
=DEC2HEX(SUMPRODUCT({1;2;4;8;16;32;64},G1:G7),2)
Run Code Online (Sandbox Code Playgroud)
前任:

参考http://www.computerhope.com/binhex.htm