Excel VBA 写入混合了 ASCII 字符串和低值字节(所有值都设置为零)的输出文件 -
Excel VBA write output file with mixture of ASCII strings and low-value bytes (all values set to zero) -
在 Excel VBA (2019) 我正在尝试写出 .bri 类型的过渡交易文件格式
.bri 的规范要求重复(取决于总交易中的板数)套
- 每块板卡的39个ASCII码
- 10 个正常的 ASCII 空格
- 另外 22 个 ASCII 空格
- 另外 18 个空值字节(所有位都设置为 0)
作为文件中的连续一行。
我尝试过的示例代码示例仅通过以下方式写入 1 个电路板:
Type BriType
boardVar As String
byteArr(17) As Byte
End Type
Sub TestBriWrite()
Dim i, j, k, l, m As Integer
Dim FileName As String, fileNo As Integer
Dim FileLoc As Variant
Dim filler As String
Dim BriVar As BriType
BriVar.boardVar = "010203040506070809101112131415161718192021222324252627282930313233343536373839 "
For m = 0 To 17
BriVar.byteArr(m) = 0
Next m
FileLoc = Application.GetSaveAsFilename(Title:="Save the Deal File as xxxxx.bri")
fileNo = FreeFile
Open FileLoc For Binary As #fileNo
Put #fileNo, 1, BriVar
Close #fileNo
End Sub
这似乎接近我想要的,但在输出文件中每个板条目都以“n”开头。谁能建议我如何实现我想要做的事情?
抱歉,这是我第一次 post 加入董事会,所以我可能没有遵守所有规则。
由于 BriVar.boardVar
被声明为可变长度字符串,前两个字节用于跟踪其长度以供后续读取。
在您的示例中,您为变量分配了一个 110 个字符的字符串。因此它使用两个字节将该值存储在您的文件中。第一个字节的值为110,第二个字节的值为0。
因此,当您在文本编辑器中打开文件时,您会看到 ASCII 值 110 和 0 的字符表示,即字母 'n' 和空字符。
您可以通过声明一个固定长度的字符串来避免这两个字节。例如,假设您的字符串的长度始终为 110 个字符。然后你将声明你的字符串如下...
Type BriType
boardVar As String * 110 '<--- fixed length string
byteArr(17) As Byte
End Type
顺便说一句,您应该修改您的代码,以便在提示用户保存文件并单击“取消”时退出子程序....
FileLoc = Application.GetSaveAsFilename(Title:="Save the Deal File as xxxxx.bri")
If FileLoc = False Then Exit Sub '<-- user cancelled
所以这里是你的宏修改如上...
Type BriType
boardVar As String * 110
byteArr(17) As Byte
End Type
Sub TestBriWrite()
Dim i, j, k, l, m As Integer
Dim FileName As String, fileNo As Integer
Dim FileLoc As Variant
Dim filler As String
Dim BriVar As BriType
FileLoc = Application.GetSaveAsFilename(Title:="Save the Deal File as xxxxx.bri")
If FileLoc = False Then Exit Sub
BriVar.boardVar = "010203040506070809101112131415161718192021222324252627282930313233343536373839 "
For m = 0 To 17
BriVar.byteArr(m) = 0
Next m
fileNo = FreeFile
Open FileLoc For Binary As #fileNo
Put #fileNo, 1, BriVar
Close #fileNo
End Sub
在 Excel VBA (2019) 我正在尝试写出 .bri 类型的过渡交易文件格式 .bri 的规范要求重复(取决于总交易中的板数)套
- 每块板卡的39个ASCII码
- 10 个正常的 ASCII 空格
- 另外 22 个 ASCII 空格
- 另外 18 个空值字节(所有位都设置为 0) 作为文件中的连续一行。
我尝试过的示例代码示例仅通过以下方式写入 1 个电路板:
Type BriType
boardVar As String
byteArr(17) As Byte
End Type
Sub TestBriWrite()
Dim i, j, k, l, m As Integer
Dim FileName As String, fileNo As Integer
Dim FileLoc As Variant
Dim filler As String
Dim BriVar As BriType
BriVar.boardVar = "010203040506070809101112131415161718192021222324252627282930313233343536373839 "
For m = 0 To 17
BriVar.byteArr(m) = 0
Next m
FileLoc = Application.GetSaveAsFilename(Title:="Save the Deal File as xxxxx.bri")
fileNo = FreeFile
Open FileLoc For Binary As #fileNo
Put #fileNo, 1, BriVar
Close #fileNo
End Sub
这似乎接近我想要的,但在输出文件中每个板条目都以“n”开头。谁能建议我如何实现我想要做的事情?
抱歉,这是我第一次 post 加入董事会,所以我可能没有遵守所有规则。
由于 BriVar.boardVar
被声明为可变长度字符串,前两个字节用于跟踪其长度以供后续读取。
在您的示例中,您为变量分配了一个 110 个字符的字符串。因此它使用两个字节将该值存储在您的文件中。第一个字节的值为110,第二个字节的值为0。
因此,当您在文本编辑器中打开文件时,您会看到 ASCII 值 110 和 0 的字符表示,即字母 'n' 和空字符。
您可以通过声明一个固定长度的字符串来避免这两个字节。例如,假设您的字符串的长度始终为 110 个字符。然后你将声明你的字符串如下...
Type BriType
boardVar As String * 110 '<--- fixed length string
byteArr(17) As Byte
End Type
顺便说一句,您应该修改您的代码,以便在提示用户保存文件并单击“取消”时退出子程序....
FileLoc = Application.GetSaveAsFilename(Title:="Save the Deal File as xxxxx.bri")
If FileLoc = False Then Exit Sub '<-- user cancelled
所以这里是你的宏修改如上...
Type BriType
boardVar As String * 110
byteArr(17) As Byte
End Type
Sub TestBriWrite()
Dim i, j, k, l, m As Integer
Dim FileName As String, fileNo As Integer
Dim FileLoc As Variant
Dim filler As String
Dim BriVar As BriType
FileLoc = Application.GetSaveAsFilename(Title:="Save the Deal File as xxxxx.bri")
If FileLoc = False Then Exit Sub
BriVar.boardVar = "010203040506070809101112131415161718192021222324252627282930313233343536373839 "
For m = 0 To 17
BriVar.byteArr(m) = 0
Next m
fileNo = FreeFile
Open FileLoc For Binary As #fileNo
Put #fileNo, 1, BriVar
Close #fileNo
End Sub