从提取的 .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"’
我正在尝试从 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"’