从提取的 .zip 文件中读取 xls 文件时出错

Error in reading a xls file from a extracted .zip file

我正在尝试从 url 下载 .zip 文件并提取 .xls 文件以阅读它。

虽然下载 zip 文件并将其解压缩是一项简单的任务,但我无法阅读它,每次我尝试阅读 .xls 文件时都会收到以下错误消息:

Erro: filepath: .\RtmpwNCJdK/Tab_Compl_CNT_1T21.xls libxls error: Unable to open file


# if(!require(readxl)){ install.packages("readxl") }

url <- "https://ftp.ibge.gov.br/Contas_Nacionais/Contas_Nacionais_Trimestrais/Tabelas_Completas/Tab_Compl_CNT.zip"

temp_ <- tempdir()

download.file( url = url,
               destfile = paste0(temp_,"/Tab_Compl_CNT.zip"),
               mode = "wb" )

unzip( zipfile=paste0(temp_,"/Tab_Compl_CNT.zip"), exdir = temp_ )

file <- readxl::read_excel( path = paste0(temp_,"/Tab_Compl_CNT_1T21.xls"), 
                            sheet = "Base Móvel", 
                            skip = 3 )  


为了确保该文件确实是一个 xls 文件,我 运行:

readxl:::format_from_signature( paste0(temp_,"/Tab_Compl_CNT_1T21.xls") )

[1] "xls"

感谢您的帮助!

我想我可以确认@r2evan 的诊断。我解压缩文件,打开它并使用 OpenOffice 重新保存到另一个文件,然后能够使用 readxl::read_excel() 读取文件。

请注意,该文件的开头也有“有趣”的结构 - hierarchical/merged 标签 - 您也必须处理,最简单的解决方案是跳过前 4 行并添加您自己的列名手动,尽管所有这些问题 [除了您最初提出的不可读性问题] 都可以通过编程方式解决,如果您愿意努力工作的话。

This question 列出了相关问题和可能的解决方案,尽管简单的似乎不起作用:那里有一个编程解决方案(使用 OpenOffice 命令行工具),其他一切都是“打开它并使用 Excel/OpenOffice".

重新保存
  • gdata::read.xls() 成功打开原始文件,但随后出现“无效的多字节字符串”
  • XLConnect::readWorksheetFromFile("Tab_Compl_CNT_1T21.xls"):

Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘readWorksheet’ for signature ‘"workbook", "missing"’