首页 文章

使用URL中的XLConnect包将Excel文件读入R中

提问于
浏览
2

关于如何使用XLConnect包将Microsoft Excel文件读入R中有很多很好的例子,但我找不到任何如何直接从URL读取Excel文件的示例 . 下面的可重现示例返回“ FileNotFoundException (Java) ” . 但是,我知道该文件存在,因为我可以通过将URL粘贴到浏览器中直接提取它 .

fname <- "https://www.misoenergy.org/Library/Repository/Market%20Reports/20140610_sr_nd_is.xls"
sheet <- c("Sheet1")
data  <- readWorksheetFromFile(fname, sheet, header=TRUE, startRow=11, startCol=2, endCol=13)

虽然URL的前缀为“ https: ”,但它是一个不需要用户名或密码的公共文件 .

我试图首先使用 download.file(fname, destfile="test.xls") 下载该文件并收到一条消息,说明它已被下载但是当我尝试在Excel中打开它以检查它是否成功时,我得到一个Excel弹出框,上面写着“..found unreadable content在'test.xls' .

以下是我系统的具体内容:

计算机:64位戴尔运行操作系统:Windows 7 Professional R版本:R-3.1.0

任何帮助将不胜感激 .

4 回答

  • 2

    您可以使用 RCurl 下载文件:

    library(RCurl)
    library(XLConnect)
    appURL <- "https://www.misoenergy.org/Library/Repository/Market%20Reports/20140610_sr_nd_is.xls"
    f = CFILE("exfile.xls", mode="wb")
    curlPerform(url = appURL, writedata = f@ref, ssl.verifypeer = FALSE)
    close(f)
    out <- readWorksheetFromFile(file = "exfile.xls", sheet = "Sheet1", header = TRUE
                          , startRow = 11, startCol = 2, endCol = 15, endRow = 35)
    > head(out)
    Col1 EEI Col3 IESO MHEB Col6 PJM SOCO SWPP TVA WAUE Col12 Other Total
    1 Hour  1 272   NA  768 1671   NA 148  200  -52 198  280    NA   700  4185
    2 Hour  2 272   NA  769 1743   NA 598  200  -29 190  267    NA   706  4716
    3 Hour  3 272   NA  769 1752   NA 598  200  -28 194  267    NA   710  4734
    4 Hour  4 272   NA  769 1740   NA 598  200  -26 189  266    NA   714  4722
    5 Hour  5 272   NA  769 1753   NA 554  200  -27 189  270    NA   713  4693
    6 Hour  6 602   NA  769 1682   NA 218  200  -32 223  286    NA   714  4662
    
  • 1

    XLConnect不支持直接从URL导入 . 你必须使用例如 download.file 首先将文件下载到本地计算机:

    require(XLConnect)
    tmp = tempfile(fileext = ".xls")
    download.file(url = "http://www.econ.yale.edu/~shiller/data/chapt26.xls", destfile = tmp)
    readWorksheetFromFile(file = tmp, sheet = "Data", header = FALSE, startRow = 9, endRow = 151)
    

    或者您最初提出的网址:

    require(XLConnect)
    tmp = tempfile(fileext = ".xls")
    download.file(url = "https://www.misoenergy.org/Library/Repository/Market%20Reports/20140610_sr_nd_is.xls", destfile = tmp, method = "curl")
    readWorksheetFromFile(file = tmp, sheet = "Sheet1", header = TRUE, startRow = 11, startCol = 2, endCol = 13)
    
  • 1

    两件事情:

    • 尝试使用不同的包 - 我知道 gdata 包的 read.xls 函数支持URL

    • 尝试在公开的xls文件中加载,以确保它不是特定网站的问题 .

    例如,您可以尝试:

    library("gdata")
    site <- "http://www.econ.yale.edu/~shiller/data/chapt26.xls"
    data  <- read.xls(site, header=FALSE, skip=8)
    head(data)
    
  • 1
    library(relenium)
    library(XML)
    library(RCurl)
    
    firefox=firefoxClass$new()
    url="https://www.misoenergy.org/Library/Repository/Market%20Reports/20140610_sr_nd_is.xls"
    url=sprintf(url)
    firefox$get(url)
    

    这将在R中打开一个Firefox实例并要求您下载该文件,然后您可以在下一行代码中打开该文件 . 我不知道任何可以从HTTPS打开Excel电子表格的R工具 .

    然后,您可以在保存文件时设置延迟,然后从下载文件夹中读取工作表:

    Sys.sleep(10)
    sheet <- c("Sheet1")
    data  <- readWorksheetFromFile(path, sheet, header=TRUE, startRow=11, startCol=2, endCol=13)
    

相关问题