【问题标题】:Convert a file to binary for insertion in an xml file将文件转换为二进制文件以插入 xml 文件
【发布时间】:2020-01-12 16:00:14
【问题描述】:

如果我查看 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

【问题讨论】:

    标签: xml binary attachment


    【解决方案1】:

    这是我找到的解决方案。我正在使用它来将文件转换为这种情况下所需的 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
    

    【讨论】:

      【解决方案2】:

      标签之间的代码...

      ...很可能是Base64
      所以使用 Base64 编码器将二进制文件编码为 Base64 格式,然后将该字符串包含到 XML 文件中。

      假设您使用 VisualBasic,快速搜索显示this solution

      【讨论】:

      • 这有帮助。我使用的是 VBA,而不是 VB,所以链接的解决方案不起作用。我确实找到了完成大部分工作所需的代码,但我仍然需要一些东西来将作为字符串读入的文件转换为字节,就像某种 BinToByte 例程一样。我还没有找到一个有效的。以下是 PDF 文件的示例。 %PDF-1.7 4 0 obj (Identity) endobj 5 0 obj (Adobe) endobj 8 0 obj > 流 xœì½ xUÖ0|參zïNw'é,ÝÎÞ² t '0l ICH€°‹È6†qÄ uFQÇÝQGßѰˆ ÅAGqu\PdÔe”aHºÿsow5Ä÷õßïÿŸçû>‹Ôé[·¶[g?çž*FÙ
      • 也许this SO question 对你有帮助。这是 Base64 编码的 VBA 解决方案。另一种解决方案can be found here(“Aufruf”的意思是“调用它”)。
      猜你喜欢
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 2011-10-08
      • 2013-08-20
      • 1970-01-01
      相关资源
      最近更新 更多