将Excel的16进位字串输出成Binary档

使用情境如下图,我已经在Excel中做好一串16进字字串,想要输出成.bin档(如第二张图)

http://img2.58codes.com/2024/201610522dOSxzMHIs.png
http://img2.58codes.com/2024/20161052LVEVDjDN7L.png

最理想是可以直接複製贴上,有一些文字编辑器可以做到,但这样移植性太差,要分享给其他人用的时候太麻烦了,后来找到这个线上工具 HEX to file(binary) Converter 还不错用,还会自动滤掉空格、逗号、0x等等多余的字元,但需要 複製文字→开网页→贴上→转换→存档→开档 好几个步骤才能得到结果,还是有点麻烦。

后来注意到网站下面有附上原始码以及执行档,于是花了点时间研究如何把它跟Excel对接。这个执行档的功能是输入.txt并输出.bin,无奈功力不够没能成功改成直接贴上文字就能运作,于是退而求其次,使用Excel VBA製作一个中继的文字档,并操作CMD将文字档输入exe,得到我要的档案并直接开启。

以下是VBA的程式,製作按钮及设定巨集的过程不在这边赘述

Sub 按钮284_Click()    Dim MYstr As String        For Each c In Range("C3:R18")        MYstr = MYstr + c.Value    Next c        Open ThisWorkbook.Path & "\BINtemp.txt" For Output As #1        Print #1, MYstr    Close #1        CMD = "cmd /k cd " & ThisWorkbook.Path & _            "&& .\hex2bin.exe --i BINtemp.txt --o OUT.bin" & _            "&& del BINtemp.txt" & _            "&& start .\OUT.bin" & _            "&& exit"        Dim myret    myret = Shell(CMD, 1)End Sub

分成三个部分:

使用for迴圈将文字範围组成字串MYstr,顺序是左上一列一列到右下新增并开启BINtemp.txt档作为中继档(若已存在则覆盖),将MYstr写入,完成后关闭档案写好脚本CMD,再用Shell()指令执行,说明一下其中的细节:cmd :执行CMD,通常都会有这个变数/k :执行时会显示CMD视窗(让使用者看得出有在执行)& _ :VBA程式分行符号&& :CMD多行指令符号第二行hex2bin.exe的指令,格式为「--i 输入路径 --o 输出路径及档名」del :删除档案start :以新视窗执行(否则会直接在CMD中执行)exit :关闭CMD

以上

========================= 2023/10/13 更新 =========================
最近发现上面的写法在碰到路径名称有空格时会报错,解法是在路径外面加上双引号「"」,写法如下:

    CMD = "cmd /k cd " & """" & ThisWorkbook.path & """" & _            "&& .\hex2bin.exe --i BINtemp.txt --o OPtable.bin" & _            "&& del BINtemp.txt" & _            "&& start .\OPtable.bin" & _            "&& exit"

其中有2组4个连续的双引号,前后2个将中间的2个表示为字串(VBA),到了CMD会将中间2个双引号解释为1个双引号,希望下面的说明可以帮助理解:

"cd " & """" & "folder 1/file" & """" <= 完整程式的写法
cd ""folder 1/file"" <= VBA组出来的字串,也就是传到CMD的字串
cd "folder 1/file" <= CMD执行的指令,其中路径有空格,加了双引号才能正常执行

========================= 2023/11/14 更新 =========================
今天又发现一个bug,原本CMD打开来的路径是在C槽,若Excel路径是放在D槽中,原本的程式会cd不到D槽造成路径错误,而修正方法是在 cd之后加上 \d 便可解决,经测试在C槽及D槽下都能正常使用。修改后的指令如下:

    CMD = "cmd /k cd /d" & """" & ThisWorkbook.path & """" & _            "&& .\hex2bin.exe --i BINtemp.txt --o OPtable.bin" & _            "&& del BINtemp.txt" & _            "&& start .\OPtable.bin" & _            "&& exit"

没几行程式也能有这么多bug,希望不会再有更新了。

========================= 2024/01/23 更新 =========================
感谢下面大大的建议,多挂一个exe的确蛮麻烦的,直接用VBA解决就好了,结合之后程式码如下:

Sub 产生BIN档()    Dim row    Dim col    Dim i    Dim handle As Long        handle = FreeFile    Open ThisWorkbook.Path & "\BIN_File.bin" For Binary As #handle    For i = 0 To 255        row = Int(i / 16)        col = i Mod 16        Put #handle, , CByte("&H" & Range("J3").Offset(row, col))     Next i    Close #handle    CMD = "cmd /k cd /d" & """" & ThisWorkbook.Path & """" & _          "&& start .\BIN_File.bin" & _          "&& exit"          Dim myret    myret = Shell(CMD, 1)End Sub

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章