如何通过线WinHTTP的响应解析线:UTF-8编码的CSV?(How to parse line

2019-07-18 02:02发布

至于我高兴地解决问题,下一步( 不理解为什么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转换。 不过,我面临以下眼前的烦恼:

  1. CSV是UTF-8编码,而原材料WinHTTP的响应文本似乎是不。 有没有办法使用所需的编码来解释呢?
  2. 如何CSV拆分成线? 使用Split功能或任何其他? CSV似乎用一些标准的换行字符,而数据99%应该没有任何这些。

有解决许多类似的困难,但我没有发现任何明确的和可以接受的VBA至今,所以任何帮助将不胜感激。 提前致谢!

Answer 1:

最后,我发现我自己的这两个解决方案:

  1. CSV为UTF-8的转换与ADODB.Stream的帮助(详见: http://www.motobit.com/tips/detpg_binarytostring/ )
  2. 分裂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文件,现在完全自给自足。 希望这会帮助别人也是如此。 非常感谢大家谁留下意见 - 他们缩小了我的搜索。



Answer 2:

这条线

OutputRange = WorksheetFunction.Transpose(CSV_Strings)

应该是这样的

OutputRange.Formula = WorksheetFunction.Transpose(CSV_Strings)


文章来源: How to parse line by line WinHTTP response: UTF-8 encoded CSV?