将文件转换为二进制文件以插入 xml 文件
Convert a file to binary for insertion in an xml file
如果我查看 MS Infopath XML 文件的内部,附件似乎是存储在标签之间的某种 ASCII 二进制代码。我没有确定的背景,所以我不确定。这应该很容易用 VBA 我想。
我使用的代码如下。在这种情况下,我试图从我可以嵌入的 Excel 文件中获取文本。如果您 运行 该代码,则错误应该是关于参数类型错误的问题。在这种情况下,我引用了一个 Excel 文件,但它可能是很多东西。
标签之间的代码是这样的:stu2zAQvBfIPwi8BhadFCiKwnIOSXNMA8QFeqWptUWYr5Lr1P77rqg4MQLHimoCzUWURHJmdpaPnVxtjC4eI
我不知道这是否有帮助,但我不知道该怎么做。
Const adTypeBinary = 1Const adTypeText = 2
Const adModeReadWrite = 3
Sub RunThis()
bin2var "c:\documents\IYYMMCC Validation.xlsx"
End Sub
Function bin2var(filename As String) As String
Dim f As Integer
f = FreeFile()
Open filename For Binary Access Read Lock Write As #f
bin2var = Space(FileLen(filename))
Get #f, , bin2var
thestring = BytesToString(bin2var, CdoUS_ASCII)
Close #f
End Function
Function BytesToString(bytes, charset)
With CreateObject("ADODB.Stream")
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write bytes
.Position = 0
.Type = adTypeText
.charset = charset
BytesToString = .ReadText
End With
End Function
The code between the tags...
...很可能是 Base64.
因此,使用 Base64 编码器将二进制文件编码为 Base64 格式,然后将该字符串包含到 XML 文件中。
假设您使用 VisualBasic,快速搜索显示 this solution。
这是我找到的解决方案。我正在使用它来将文件转换为本例中所需的 Base64:
Function EncodeBase64ForString(strString As String) As String
Dim arrData() As Byte
arrData = StrConv(strString, vbFromUnicode)
Dim objXML As MSXML2.DOMDocument60
Dim objNode As MSXML2.IXMLDOMElement
Set objXML = New MSXML2.DOMDocument60
Set objNode = objXML.createElement("b64")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = arrData
EncodeBase64ForString = objNode.text
Set objNode = Nothing
Set objXML = Nothing
End Function
Public Function GetFileBytes(ByVal strPath As String) As Byte()
Dim lngFileNum As Long
Dim bytRtnVal() As Byte
lngFileNum = FreeFile
If LenB(Dir(strPath)) Then ''// Does file exist?
Open strPath For Binary Access Read As lngFileNum
ReDim bytRtnVal(LOF(lngFileNum) - 1&) As Byte
Get lngFileNum, , bytRtnVal
Close lngFileNum
Else
Err.Raise vbObjectError + 1, , "Could not find " & strPath
End If
GetFileBytes = bytRtnVal
Erase bytRtnVal
End Function
如果我查看 MS Infopath XML 文件的内部,附件似乎是存储在标签之间的某种 ASCII 二进制代码。我没有确定的背景,所以我不确定。这应该很容易用 VBA 我想。
我使用的代码如下。在这种情况下,我试图从我可以嵌入的 Excel 文件中获取文本。如果您 运行 该代码,则错误应该是关于参数类型错误的问题。在这种情况下,我引用了一个 Excel 文件,但它可能是很多东西。
标签之间的代码是这样的:stu2zAQvBfIPwi8BhadFCiKwnIOSXNMA8QFeqWptUWYr5Lr1P77rqg4MQLHimoCzUWURHJmdpaPnVxtjC4eI
我不知道这是否有帮助,但我不知道该怎么做。
Const adTypeBinary = 1Const adTypeText = 2
Const adModeReadWrite = 3
Sub RunThis()
bin2var "c:\documents\IYYMMCC Validation.xlsx"
End Sub
Function bin2var(filename As String) As String
Dim f As Integer
f = FreeFile()
Open filename For Binary Access Read Lock Write As #f
bin2var = Space(FileLen(filename))
Get #f, , bin2var
thestring = BytesToString(bin2var, CdoUS_ASCII)
Close #f
End Function
Function BytesToString(bytes, charset)
With CreateObject("ADODB.Stream")
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write bytes
.Position = 0
.Type = adTypeText
.charset = charset
BytesToString = .ReadText
End With
End Function
The code between the tags...
...很可能是 Base64.
因此,使用 Base64 编码器将二进制文件编码为 Base64 格式,然后将该字符串包含到 XML 文件中。
假设您使用 VisualBasic,快速搜索显示 this solution。
这是我找到的解决方案。我正在使用它来将文件转换为本例中所需的 Base64:
Function EncodeBase64ForString(strString As String) As String
Dim arrData() As Byte
arrData = StrConv(strString, vbFromUnicode)
Dim objXML As MSXML2.DOMDocument60
Dim objNode As MSXML2.IXMLDOMElement
Set objXML = New MSXML2.DOMDocument60
Set objNode = objXML.createElement("b64")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = arrData
EncodeBase64ForString = objNode.text
Set objNode = Nothing
Set objXML = Nothing
End Function
Public Function GetFileBytes(ByVal strPath As String) As Byte()
Dim lngFileNum As Long
Dim bytRtnVal() As Byte
lngFileNum = FreeFile
If LenB(Dir(strPath)) Then ''// Does file exist?
Open strPath For Binary Access Read As lngFileNum
ReDim bytRtnVal(LOF(lngFileNum) - 1&) As Byte
Get lngFileNum, , bytRtnVal
Close lngFileNum
Else
Err.Raise vbObjectError + 1, , "Could not find " & strPath
End If
GetFileBytes = bytRtnVal
Erase bytRtnVal
End Function