Tro*_*ted 7 excel vba web-services excel-vba
你好Excel Excel vba编码员
我在excel表中有这个很好的宏,我根据用户输入的行编译XML - 之后它将xml发布到web服务.
您可以查看下面的代码 - 这很简单:
Set XMLHttpRequest = New MSXML2.XMLHTTP
With XMLHttpRequest
.Open "POST", URL, False
.setRequestHeader "Content-Type", "text/xml; encoding='utf-8'"
.setRequestHeader "Content-Length", strLength
.send strXML
End With
Run Code Online (Sandbox Code Playgroud)
现在,当行数少于200行时,它的效果很好,但当行数超过1000行时,它会超时.我发布的XML字符串非常大,我很确定这是它超时的原因.
现在我的问题是,如何将这个超过1.000行,甚至超过20.000行的庞大数据集发布到Web服务?
到目前为止,我已花费大量时间在网络上寻找可能的解决方案,但尚未找到解决此问题的方法.到目前为止,我有以下想法来解决这个问题:
我真的希望你们中的一个能指出我正确的方向并帮助我解决这个问题吗?
好的 - 我找到了解决问题的方法,这似乎是处理这个问题的最佳方法。
我使用以下函数来复制工作簿:
Private Function saveAS(Path As String)
Application.EnableEvents = False
Application.DisplayAlerts = False
ActiveWorkbook.Sheets.Copy
ActiveWorkbook.saveAS Path, FileFormat:=51
ActiveWorkbook.Close savechanges:=True
Application.EnableEvents = True
Application.DisplayAlerts = True
End Function
Run Code Online (Sandbox Code Playgroud)
然后我将文件编码为 base64 字符串,如下所示:
Private Function EncodeFileBase64(Filename As String) As String
Dim arrData() As Byte
Dim fileNum As Integer
Filename = Filename + ".xlsx"
fileNum = FreeFile
Open Filename For Binary As fileNum
ReDim arrData(LOF(fileNum) - 1)
Get fileNum, , arrData
Close fileNum
Dim objXML As MSXML2.DOMDocument
Dim objNode As MSXML2.IXMLDOMElement
Set objXML = New MSXML2.DOMDocument
Set objNode = objXML.createElement("b64")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = arrData
EncodeFileBase64 = objNode.Text
Set objNode = Nothing
Set objXML = Nothing
End Function
Run Code Online (Sandbox Code Playgroud)
然后我将编码后的字符串发送到我自己的 .asmx Web 服务并在 C# 中使用它。 Web 方法如下所示:
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public string UploadXML(string base64string)
{
try
{
byte[] bytes = Convert.FromBase64String(base64string);
using (MemoryStream ms = new MemoryStream(bytes))
{
using (var package = new ExcelPackage(ms))
{
ExcelWorkbook workBook = package.Workbook;
ExcelWorksheet settings = workBook.Worksheets.SingleOrDefault(w => w.Name == "sheet1");
ExcelWorksheet data = workBook.Worksheets.SingleOrDefault(w => w.Name == "sheet2");
//Getting data
string SS1 = (string)settings.Cells[8, 3].Value;
string ss2 = (string)settings.Cells[7, 3].Value;
}
}
return "success";
}
catch (Exception ee)
{
return ee.Message;
}
}
Run Code Online (Sandbox Code Playgroud)
我只需要找到一种好方法来提取智能算法中的所有数据,我认为这根本不会成为问题:)
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |