Как загрузить данные CSV в Excel 2013, используя https с базовой аутентификацией?

#basic-authentication #excel-2013 #excel-web-query

#базовая аутентификация #excel-2013 #excel-веб-запрос

Вопрос:

Для этого я написал следующий скрипт 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"))   "amp;from="   CStr(Range("B3"))   "amp;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 несколько лишних запросов опций и ЗАГОЛОВОК, но, наконец, только один GET, который извлекает данные.

В Excel 2013 я вижу три ВАРИАНТА, затем HEAD, который является успешным (200), и, наконец, GET, который не является успешным (401). Для дальнейшего изучения я активировал модуль mod_dumpio, чтобы посмотреть, что происходит. И Apache, конечно, прав, отказываясь от Excel 2013:

 HEAD /some/path/some-file.csv?partner_code=25010amp;from=01.01.2014amp;to=01.06.2014 HTTP/1.1rn
...
Authorization: Basic Y29udHJvbGxpbmc6Rm9vNWFoUGg=rn
  

на что выдается ответ 200, и сразу после этого появляется GET

 GET /some/path/some-file.csv?partner_code=25010amp;from=01.01.2014amp;to=01.06.2014 HTTP/1.1rn
  

в котором отсутствует базовый заголовок auth, и поэтому на него отвечает

 HTTP/1.1 401 UnauthorizedrnDate: Thu, 03 Jul 2014 18:18:59 GMTrnServer: ApachernPragma: No-cachernCache-Control: no-cachernExpires: Thu, 01 Jan 1970 01:00:00 CETrnWWW-Authenticate: Basic realm="Import/Export"rnVary: Accept-EncodingrnContent-Encoding: gziprnContent-Length: 378rnConnection: closernContent-Type: text/html;charset=utf-8rnrn
  

Я следовал инструкциям в http://support.microsoft.com/kb/2123563/en-us шаг за шагом, но это не помогло. Также HEAD фактически работает и использует базовую аутентификацию.

Как загрузить данные CSV в Excel 2013, используя https с базовой аутентификацией?

Комментарии:

1. Windows 7 Pro SP1, Excel 2013: 15.0.4420.1017, IE10: 10.0.9200.16921

2. Это не работает ни с https, ни с http. Я изменил ответ HEAD с 200 на 406, но это тоже не помогло.