从 httr 响应读取 'raw' xlsx 文件到数据帧

Reading 'raw' xlsx file from httr response into data frame

我正在使用 httr 包通过其 REST API 从我们的报告系统检索数据。我将内容指定为 xlsx。响应包含原始(二进制?)文件。

我的请求如下所示:

request = GET("http://server/.../documents/123456", 
             add_headers(.headers = c('Accept'= 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 
                                      'authtoken' = paste0('', logonToken,''))) ,
             content_type("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"),
             encode = 'raw'
)

content(request)
[1] 50 4b 03 04 0a 00 08 08 08 00 19 88 79 54 00 00 00 00 00 00 00
[44] 2f 73 68 65 65 74 31 2e 78 6d 6c a5 57 5b 6f 9b 30 14 7e 9f b4
[87] 00 23 43 2f db af 9f c1 94 d8 c6 58 93 92 87 54 f5 77 f1 39 fe 
     ... etc

结果可以保存为 .xlsx 并在 Excel 中打开。但是,我想将这些数据直接读取到数据框中。有没有办法在同一脚本中将结果模拟为可读输入?

我可以传递一个额外的参数 write_disk 将响应直接保存为文件。需要指定路径。我尝试使用 tempfile() 进行测试以直接写入和读取响应,但无法使其正常工作。

有什么方法可以从 R 环境对象中读取原始文件吗?

是的,这是一个完全可重现的例子url:

url <- paste0('https://file-examples.com/storage/fe91183158623ded19eb446/',
              '2017/02/file_example_XLSX_100.xlsx')

现在下载我们的文件并获取其原始内容:

raw_xlsx <- httr::GET(url)$content

让我们创建一个临时文件来存储它:

tmp <- tempfile(fileext = '.xlsx')

现在将原始数据写入文件:

writeBin(raw_xlsx, tmp)

我们的 excel 文件现在保存在临时文件中,我们可以读取它,但是您通常会将它们读入 R:

my_excel <- readxl::read_excel(tmp)

结果是:

my_excel
#> # A tibble: 100 x 8
#>      `0` `First Name` `Last Name` Gender Country         Age Date          Id
#>    <dbl> <chr>        <chr>       <chr>  <chr>         <dbl> <chr>      <dbl>
#>  1     1 Dulce        Abril       Female United States    32 15/10/2017  1562
#>  2     2 Mara         Hashimoto   Female Great Britain    25 16/08/2016  1582
#>  3     3 Philip       Gent        Male   France           36 21/05/2015  2587
#>  4     4 Kathleen     Hanner      Female United States    25 15/10/2017  3549
#>  5     5 Nereida      Magwood     Female United States    58 16/08/2016  2468
#>  6     6 Gaston       Brumm       Male   United States    24 21/05/2015  2554
#>  7     7 Etta         Hurn        Female Great Britain    56 15/10/2017  3598
#>  8     8 Earlean      Melgar      Female United States    27 16/08/2016  2456
#>  9     9 Vincenza     Weiland     Female United States    40 21/05/2015  6548
#> 10    10 Fallon       Winward     Female Great Britain    28 16/08/2016  5486
#> # ... with 90 more rows