【问题标题】:Submit worksheet to a web service as a file via POST通过 POST 将工作表作为文件提交到 Web 服务
【发布时间】:2016-01-15 05:23:13
【问题描述】:

是否有一种方法可以将宏绑定到嵌入在该工作簿中的按钮(即“将工作表上传到 Web 服务”),它将获取当前工作表(作为 .xlsx 或 .csv)或整个工作簿并将其提交到通过 POST 方法的 Web 服务?

https://www.mywebservice.com/uploads

一个好处是向用户查询用户名/密码或 api 密钥,但我们可以暂时硬编码。

【问题讨论】:

  • VB.Net IsNot vba AndAlso IsNot excel-vba AndAlso VB.Net doesn't do macros
  • 好的,我删除了那个标签。当我构建问题时,它按照建议显示。谢谢。

标签: vba excel


【解决方案1】:

这是我用来将数据发布到服务器的一些代码。按钮单击处理程序循环通过活动工作表并构建一些 XML 以发布到端点。这是旧代码,我似乎记得我必须先导入 MSXML2.XMLHTTP 才能工作(在 vba 编辑器中,转到 Tools-References)。

Sub PostData_ButtonClick()
Dim bldgID As String
Dim year As String
Dim leasid As String

bldgID = ActiveSheet.Range("A1").Text
year = ActiveSheet.Range("A2").Text
Dim Result As String
Result = "<records>"
Dim c As Range
For Each c In ActiveSheet.Range("E4:ZZ4").Cells
    If Not IsEmpty(c.Value) Then
        Result = Result & [redacted]
    End If
Next
Result = Result & "</records>"
DoPost (Result)
End Sub


Function DoPost(xml As String)

Dim xmlDoc As Object
Dim boolValue As Boolean
Dim xmlDocEl As Object
Dim responseText As String
Dim xmlhtp As New MSXML2.XMLHTTP
Dim sURL As String

Dim objXML As Object
sURL = "https://www.mywebservice.com/uploads"

Dim sEnv As String

With xmlhtp
    .Open "post", sURL, False
    .setRequestHeader "Host", "www.mywebservice.com"
    .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    .setRequestHeader "Accept-encoding", "zip"
    .send "xmlFile=" & xml
    responseText = .responseText
End With
MsgBox "Response from server:" & vbCrLf & responseText
DoPost = responseText
End Function

【讨论】:

  • 嗯,这个带有 MSXML2.XMLHTTP 的解决方案是否要求内容或文件的格式为 XML?是将 XML 文件作为典型的多部分表单文件附件发送,还是将其作为 POST 有效负载中的 xml 内容发送?我们上传到的服务 1) 期望看到一个文件 2) 并不真正期望文件中包含 XML 格式的内容。我想知道如果它是一个 CSV 格式的文件,这是否会起作用?
  • 不一定是 XML。看看这个,它可能更符合您正在寻找的内容:stackoverflow.com/questions/20520212/…
猜你喜欢
  • 2014-06-04
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 2012-11-22
  • 2016-01-04
相关资源
最近更新 更多