将损坏的 xls 文件加载到 r 中,无需手动更改文件类型

Art*_*ito 0 r readr readxl

我正在努力下载 Excel 文件,然后将其加载到 R:

utils::download.file(
  url = 'https://servicos.ibama.gov.br/ctf/publico/areasembargadas/downloadListaAreasEmbargadas.php',
  destfile = 'C:/users/arthu/Desktop/fines.rar',
  mode = "wb"
)
Run Code Online (Sandbox Code Playgroud)

解压并尝试将其加载到 R 中后:

utils::unzip(
  zipfile = './fines.rar',
  exdir = './ibama_data'
)


dados <- readxl::read_xls(
  "./ibama_data/rel_areas_embargadas_0-65000_2020-12-10_080019.xls"),
  skip = 6,
  col_type = c(rep("guess", 13), "date", "guess", "date")
)
Run Code Online (Sandbox Code Playgroud)

我明白了libxls error: Unable to open file

如果我尝试将文件重命名为 .xlsx,如下所示,则在使用 读取文件时会出现评估错误readxl::read_excel,说unable to open file

 file <-   file.rename(
      from = "./Desktop/ibama_data/rel_areas_embargadas_0-65000_2020-12-10_080019.xls",
      to = "./Desktop/ibama_data/test.xlsx"
    )
Run Code Online (Sandbox Code Playgroud)

但是,如果我手动打开这样的文件,Excel 会向我发出警告,指出该文件的扩展名与其类型不匹配。将其保存为 .xlsx 后,我终于可以使用加载它read_excel

鉴于我想编写一个包含从网络下载此类数据然后将其加载到 R 中的函数的包,我该如何解决这个问题?

编辑

Wal*_*ldi 5

.xls您尝试读取的文件不是 Excel 文档,而是 HTML 表格。
您可以使用XMLpackage 来阅读它:

library(XML)
doc <- htmlParse('rel_areas_embargadas_0-65000_2021-01-13_080018.xls')
tableNode <- getNodeSet(doc, '//table')
data <- XML::readHTMLTable(tableNode[[1]])

#Store header
header <- data[1:5,]

#Store colnames
colnames <- data[6,]

#Remove header
data <- data[-1:-6,]

#Set colnames
colnames(data)<-colnames

head(data)

Run Code Online (Sandbox Code Playgroud)

  • 当您无法打开文件时,尝试在“Notepad++”等文本编辑器中阅读它以找出其真实格式,这通常会有所帮助;) (3认同)