如何在 R 中打开 .xlsb 文件?

问题描述 投票:0回答:6

我尝试在 R 中打开 .xlsb 文件,但不断收到类似的错误。

有关如何解决此问题而无需下载数据并将其保存为不同格式的任何建议?

read.xlsx(paste(OutputLocation,FileName, sep=""), sheetName = "Master Data")

错误消息: .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, 中的错误: org.apache.poi.xssf.XLSBUnsupportedException:不支持 .XLSB 二进制工作簿

rigDataWB<-loadWorkbook(paste(OutputLocation,FileName, sep=""))

错误消息: 错误:XLSBUnsupportedException (Java):不支持 .XLSB 二进制工作簿

请注意:

我无法安装 Perl 库。

我正在运行 64 位 R。

参考: http://www.milanor.net/blog/?p=779

我的数据来自: http://phx.corporate-ir.net/phoenix.zhtml?c=79687&p=irol-reportsother

r xlsb
6个回答
16
投票

使用

RODBC
包:

library(RODBC)
wb <- "D:\\Data\\Masked Data.xlsb" # Give the file name
con2 <- odbcConnectExcel2007(wb)
data <- sqlFetch(con2, "Sheet1$") # Provide name of sheet
nrow(data)

6
投票

一种方法是使用 ODBC:

require(RODBC)
if (any(grepl("*.xlsb", odbcDataSources(), fixed = TRUE))) {
  download.file(url = "http://phx.corporate-ir.net/External.File?item=UGFyZW50SUQ9NTcwMjI1fENoaWxkSUQ9MjcxMjIxfFR5cGU9MQ==&t=1", 
                destfile = file.path(tempdir(), "test.xlsb"), 
                mode = "wb")
  conn <- odbcConnectExcel2007( file.path(tempdir(), "test.xlsb")) 
  df <- sqlFetch(conn, sub("'(.*)\\$'", "\\1", sqlTables(conn)$TABLE_NAME)[4]) # read 4th sheet in the table name list
  head(df, 10)
  #                                             F1          F2         F3       F4        F5 F6
  # 1                                         <NA>        <NA>       <NA>     <NA>      <NA> NA
  # 2                                         <NA>        <NA>       <NA>     <NA>      <NA> NA
  # 3                                         <NA>        <NA>       <NA>     <NA>      <NA> NA
  # 4                                         <NA>        <NA>       <NA>     <NA>      <NA> NA
  # 5  Baker Hughes Gulf of Mexico Oil / Gas Split        <NA>       <NA>     <NA>      <NA> NA
  # 6                                         <NA>        <NA>       <NA>     <NA>      <NA> NA
  # 7                                         <NA> US Offshore Total\nGoM Gas\nGoM Oil \nGoM NA
  # 8                                       1/7/00         127        123      116         7 NA
  # 9                                      1/14/00         125        121      116         5 NA
  # 10                                     1/21/00         125        121      116         5 NA
  close(conn) 
}

3
投票

readxlsb
包可以将 Excel 二进制 (.xlsb) 文件读取到 R 中。以下是从包小插图中获取的一些信息:

read_xlsb(path, sheet, range, col_names, col_types, na, trim_ws, skip, ...)

表:

名称或要阅读的工作表的索引。第一个工作表的索引为 1。如果工作表名称嵌入在范围参数中,或者暗示范围是命名范围,则忽略此参数

范围:

范围可以指定为

  • 命名范围。命名范围不区分大小写
  • 在工作表中!A1 符号
  • 在工作表中!R1C1 表示法
  • 作为 cellranger::cell_limits 对象

col_names

  • TRUE:第一行用于列名称。空单元格会产生“column.i”形式的列名
  • FALSE:列名称将为“column.i”
  • 字符向量:包含列名称的向量。

col_types

可以从电子表格中暗示或提前指定。指定类型时,选项有

  • “逻辑”(或“布尔”)、“数字”(或“双精度”)、“整数”、“日期”和“字符串”(或“字符”)
  • 使用“跳过”(或“忽略”)跳过某列

解释为 NA 的字符串。这不会影响列的隐含数据类型。

修剪_ws

是否应该从字符串中删除前导和尾随空格?

跳过

读取数据之前要跳过的行数。

library(readxlsb)

res = read_xlsb(path = system.file("extdata", "TestBook.xlsb", package = "readxlsb"), 
                range = "PORTFOLIO", 
                debug = TRUE)

ls(res$env)
#> [1] "content"      "named_ranges" "sheets"       "stream"

res$env$named_ranges
#>             name                     range sheet_idx first_column first_row
#> 1   INFO_RELEASE          FirstSheet!$A$11         0            1        11
#> 2        OUTLOOK 'My SecondTab'!$A$1:$C$13         1            1         1
#> 3      PORTFOLIO      FirstSheet!$A$3:$C$9         0            1         3
#> 4 SAVED_DATETIME          FirstSheet!$C$13         0            3        13
#> 5          TITLE           FirstSheet!$A$1         0            1         1
#>   last_column last_row
#> 1           1       11
#> 2           3       13
#> 3           3        9
#> 4           3       13
#> 5           1        1

reprex 包于 2020-07-07 创建(v0.3.0)


1
投票

如果在 R 尝试连接到

.xlsb
时出现以下错误:

[RODBC] ERROR: state IM002, code 0, message [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

然后,您可能缺少安装 Microsoft 的

AccessDatabaseEngine_X64.exe
。我今天遇到了这个问题,安装此文件后我没有再收到任何错误消息。


0
投票

尝试

xl.read.file(file_path, h=T, top.left.cell = "A1") from library(excel.link) 

0
投票

有一个R包可以读取xlsb

install.packages('readxlsb')
library(readxlsb)
read_xlsb(filename, sheet = "Master Data")
© www.soinside.com 2019 - 2024. All rights reserved.