至于我高兴地解决问题,下一步( 不理解为什么WinHTTP不能验证某些HTTPS资源 )我需要娇滴滴解析获得CSV。 目前,我采用如下方案:
If HTTPReq.Status = 200 Then
If FSO.FileExists(CSV_Path) = True Then FSO.DeleteFile (CSV_Path)
Set FileStream = CreateObject("ADODB.Stream")
FileStream.Open
FileStream.Type = 1
FileStream.Write HTTPReq.responseBody
FileStream.SaveToFile (CSV_Path)
FileStream.Close
ActiveWorkbook.Connections("Redmine Timelog").Refresh
ActiveSheet.PivotTables("PivotTable_RM").PivotCache.Refresh
End If
也就是说,我保存CSV到磁盘,然后链接它作为数据源到Excel。 不过,我想有我Excel工作簿自给自足,无需创建其他文件(对于一些比较明显的原因)。
解决的办法是在我的情况相当简单:商店WinHTTP.responseText
线通过在单独的Excel片(而不是当前存储的链接的CSV),然后使用线Text to Data
的Excel转换。 不过,我面临以下眼前的烦恼:
- CSV是UTF-8编码,而原材料WinHTTP的响应文本似乎是不。 有没有办法使用所需的编码来解释呢?
- 如何CSV拆分成线? 使用
Split
功能或任何其他? CSV似乎用一些标准的换行字符,而数据99%应该没有任何这些。
有解决许多类似的困难,但我没有发现任何明确的和可以接受的VBA至今,所以任何帮助将不胜感激。 提前致谢!
最后,我发现我自己的这两个解决方案:
- CSV为UTF-8的转换与ADODB.Stream的帮助(详见: http://www.motobit.com/tips/detpg_binarytostring/ )
- 分裂CSV和字符串阵列的进一步解析使用
Text to Data
的Excel程序
下面是代码的相关部分:
'CSV to UTF-8
Set FileStream = CreateObject("ADODB.Stream")
FileStream.Open
FileStream.Type = 1 'Binary
FileStream.Write HTTPReq.responseBody
FileStream.Position = 0
FileStream.Type = 2 'Text
FileStream.Charset = "UTF-8"
CSV_Text = FileStream.ReadText
FileStream.Close
'CSV Splitting
CSV_Strings = Split(Trim(CSV_Text), vbLf)
ThisWorkbook.Worksheets("RM_Log").Cells.ClearContents
Set OutputRange = ThisWorkbook.Sheets("RM_Log").Range("A1:A" & UBound(CSV_Strings) + 1)
OutputRange = WorksheetFunction.Transpose(CSV_Strings)
OutputRange.TextToColumns Destination:=ThisWorkbook.Sheets("RM_Log").Range("A1"), _
DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
Tab:=False, Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 3), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1), Array(8, 1), Array(9, 1)), DecimalSeparator:=".", _
TrailingMinusNumbers:=True
其结果是,我的Excel文件,现在完全自给自足。 希望这会帮助别人也是如此。 非常感谢大家谁留下意见 - 他们缩小了我的搜索。
这条线
OutputRange = WorksheetFunction.Transpose(CSV_Strings)
应该是这样的
OutputRange.Formula = WorksheetFunction.Transpose(CSV_Strings)