2

そのために、次の VBA スクリプトを作成し、いくつかのパラメーターを設定してデータをロードするボタンにバインドしました。その後、古い接続の山を避けるために接続を削除します。

Private Sub LoadData_Click()
    Dim ConnString As String
    Dim URL As String
    URL = "https://some-server/some/path/some-file.csv"
    ConnString = "TEXT;" + URL + "?partner_code=" + CStr(Range("B2")) + "&from=" + CStr(Range("B3")) + "&to=" + CStr(Range("B4"))

    Sheets("Import").Select
    Sheets("Import").UsedRange.Clear
    ActiveSheet.Range("A1").Value = "Data is being loaded. Hold on..."
    With ActiveSheet.QueryTables.Add(Connection:=ConnString, Destination:=ActiveSheet.Range("A1"))
        .Name = _
        " "
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlOverwriteCells
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = xlWindows
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1)
        .TextFileDecimalSeparator = ","
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With

   Do While ActiveWorkbook.Connections.Count > 0
      ActiveWorkbook.Connections.Item(ActiveWorkbook.Connections.Count).Delete
   Loop

    Sheets("Parameter").Select
End Sub

Excel 2010 では正常に動作しますが、2013 では動作しません。ボタンをクリックすると、資格情報の入力を求められ、それらを入力します。Excel 2010 では、Apache のサーバー側でいくつかの余分な OPTIONS リクエストと HEAD がログに記録されますが、最終的にデータをプルする GET は 1 つだけです。

Excel 2013 では、3 つの OPTIONS、次に成功した HEAD (200)、最後に成功しなかった GET (401) が表示されます。さらに調査するために、mod_dumpio モジュールをアクティブにして、何が起こっているかを確認しました。もちろん、Apache が Excel 2013 を拒否するのは正しいことです。

HEAD /some/path/some-file.csv?partner_code=25010&from=01.01.2014&to=01.06.2014 HTTP/1.1\r\n
...
Authorization: Basic Y29udHJvbGxpbmc6Rm9vNWFoUGg=\r\n

これは 200 で応答され、直後に GET が表示されます

GET /some/path/some-file.csv?partner_code=25010&from=01.01.2014&to=01.06.2014 HTTP/1.1\r\n

基本的な認証ヘッダーがないため、次のように応答されます

HTTP/1.1 401 Unauthorized\r\nDate: Thu, 03 Jul 2014 18:18:59 GMT\r\nServer: Apache\r\nPragma: No-cache\r\nCache-Control: no-cache\r\nExpires: Thu, 01 Jan 1970 01:00:00 CET\r\nWWW-Authenticate: Basic realm="Import/Export"\r\nVary: Accept-Encoding\r\nContent-Encoding: gzip\r\nContent-Length: 378\r\nConnection: close\r\nContent-Type: text/html;charset=utf-8\r\n\r\n

http://support.microsoft.com/kb/2123563/en-usの手順に従っていましたが、役に立ちませんでした。また、HEAD は実際に機能し、基本認証を使用しています。

基本認証でhttpsを使用してCSVデータをExcel 2013にロードする方法は?

4

0 に答える 0