XLConnect导致空单元格失败

时间:2015-10-28 20:58:40

标签: r xlconnect

我有一堆Excel电子表格,我需要从中读取某些单元格。我已经构建了一个循环来浏览所有工作簿和工作表,但我已经放弃了下面的问题中的循环来简化。

并非所有工作表或单元格都会填充数据,但如果单元格为空,则XLConnect返回空数据框,从而导致错误。

要重现,请在工作目录中创建名为xlsx的{​​{1}}文件。在testFile.xlsx上,在单元格Sheet1A1中键入您想要的任何内容,然后保存并关闭该文件。然后运行以下代码。

B2

第一个将返回:

# Load packages
library(XLConnect)

# Define positions to read
positionsToRead = c('A1', 'B2')

# This will work as A1 and B2 have data
data.frame(sapply(positionsToRead, function(x) readWorksheetFromFile("testFile.xlsx",  sheet='Sheet1', region=x, header=FALSE)))

# Change positions to read
positionsToRead = c('A1', 'B2', 'C3')

# This will fail, as C3 has no data
data.frame(sapply(positionsToRead, function(x) readWorksheetFromFile("testFile.xlsx",  sheet='Sheet1', region=x, header=FALSE)))

第二个将返回:

  A1.Col1 B2.Col1
1   data1   data2

有没有办法让这项工作? 我进行过搜索,发现Error in data.frame(A1 = list(Col1 = "data1"), B2 = list(Col1 = "data2"), : arguments imply differing number of rows: 1, 0 具有XLConnect功能,但似乎是用于定义SetMissingblank等字符串。

1 个答案:

答案 0 :(得分:1)

试试这个:

sapply(positionsToRead, 
       function(x) readWorksheetFromFile("testFile.xlsx",  
                                         sheet='Sheet1', 
                                         region=x, 
                                         header=FALSE,
                                         autofitRow = FALSE,
                                         autofitCol = FALSE))