XLConnect 导致空单元格失败

XLConnect causing failures on empty cells

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

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

要复制,请在您的工作目录中创建一个名为 testFile.xlsxxlsx 文件。在 Sheet1 上,在单元格 A1B2 中键入任何内容,然后保存并关闭文件。然后 运行 下面的代码。

# 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)))

第一个会return:

  A1.Col1 B2.Col1
1   data1   data2

第二个会return:

Error in data.frame(A1 = list(Col1 = "data1"), B2 = list(Col1 = "data2"),  : 
  arguments imply differing number of rows: 1, 0

有什么方法可以让它工作吗? 我搜索了一下,发现 XLConnect 有一个 SetMissing 函数,但它似乎是用来定义字符串的,比如 blankNA.

试试这个:

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