我有一个VBA应用程序正在与.Net网页进行通话以下载各种文件。我必须在VBA应用程序中使用的代码如下: -从.Net网站下载到VBA应用程序时Excel文件损坏
postDataString = "ID=" & SystemIdentificationCode & "&DevCode=" & ThisDeviceName & "&SysCode=" & SystemCode
For i = 0 To UBound(PostArray)
postDataString = postDataString & "&f" & i & "=" & URLEncode(PostArray(i))
Next i
Set HTT = CreateObject("Msxml2.ServerXMLHTTP.3.0")
HTT.Open "Post", "http://" & IPAddress & ":" & PortAddress & "/CareControl/ShowDocument.ashx", False
HTT.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
'HTT.setRequestHeader "Content-Type", "application/ms-excel"
HTT.setRequestHeader "Content-Length", Len(postDataString)
HTT.sEnd postDataString
If HTT.Status = 200 Then
outputObject = HTT.responseBody
CallCloudForDocument = True
Else
ErrorString = HTT.Status & ": " & HTT.statustext
CallCloudForDocument = False
End If
Set HTT = Nothing
此代码连接到一个.net网站,我也放在一起。
现在,当我用PDF或JPEG文件使用此代码时,它工作正常。文档已下载,我可以将输出写入文件。
当我尝试使用Excel文件时,该对象已损坏。我的.Net代码也低于: -
Dim fInfo As New FileInfo(DocumentName)
Dim numBytes As Long = fInfo.Length
Dim fStream As New FileStream(DocumentName, FileMode.Open, FileAccess.Read)
Dim br As New BinaryReader(fStream)
Dim DocData As Byte() = br.ReadBytes(CInt(numBytes))
If DocExt = "xls" Or DocExt = "xlsx" Then
context.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
context.Response.AppendHeader("content-disposition", "attachment;filename=Product_Report.xls")
Else
context.Response.ContentType = "image/jpeg"
End If
'System.IO.File.WriteAllText(ConfigurationManager.ConnectionStrings("FileLogPath").ConnectionString, context.Response.ContentType)
context.Response.BinaryWrite(DocData)
我的想法是,腐败必须发生的.NET版本页面上或VBA应用程序。因此,为了努力缩小范围,我使用.Net应用程序建立了一个测试平台。该测试工具调用该页面,但使用.Net Web Client。这工作正常,这表明.Net网站的输出是好的。测试装置代码如下: -
Dim webClient As New System.Net.WebClient
webClient.Encoding = System.Text.Encoding.UTF8
Dim responseArray As Byte() = webClient.UploadValues("http://192.168.1.64:/CareControl/ShowDocument.ashx", "POST", reqparm)
Dim newFile As FileStream = File.Create("C:\test54.xlsx")
newFile.Write(responseArray, 0, responseArray.GetLength(0))
newFile.Close()
newFile.Dispose()
所以问题必须在VBA代码中。但是,此代码适用于PDF /图像文件。
当我对文件进行分析时,由VBA代码生成的文件和由.Net测试工具生成的文件的唯一区别在于文件开头的顶部,看起来像是在开始时插入的一些虚假信息的文件。
任何意见将大大收到...
它是如何腐败?您是否查看了下载的数据,以查看处理不当的服务器响应? –
我会使用'application/vnd.ms-excel'作为MIME类型,尤其是如果您的支持.xls –
您似乎强制.xlsx文件的扩展名为 –