作为我愉快解决问题(Not understanding why WinHTTP does NOT authenticate certain HTTPS resource)的下一步,我需要巧妙地解析获得的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书籍能够自给自足,而不需要创建其他文件(原因很明显)。
在我的情况下,解决方案非常简单:在单独的Excel工作表(而不是当前存储的链接CSV)上逐行存储WinHTTP.responseText
,然后使用Text to Data
Excel转换。但是,我面临以下直接麻烦:
Split
功能还是其他什么? CSV似乎使用了一些标准的NewLine字符,99%的数据应该没有任何这些字符。有许多类似的问题已经解决,但到目前为止我发现VBA没有任何明确和可接受的内容,因此任何帮助都将受到赞赏。提前谢谢!
答案 0 :(得分:3)
最后,我自己找到了两种解决方案:
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文件现在完全自给自足。希望这对其他人也有帮助。非常感谢所有留下评论的人 - 他们缩小了搜索范围。
答案 1 :(得分:0)
这一行
OutputRange = WorksheetFunction.Transpose(CSV_Strings)
应该是这样的
OutputRange.Formula = WorksheetFunction.Transpose(CSV_Strings)