0

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

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

要重现,xlsx请在您的工作目录中创建一个名为testFile.xlsx. 在 上,在单元格和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)))

第一个将返回:

  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有一个SetMissing功能,但它似乎是用于定义像blankto之类的字符串NA

4

1 回答 1

1

试试这个:

sapply(positionsToRead, 
       function(x) readWorksheetFromFile("testFile.xlsx",  
                                         sheet='Sheet1', 
                                         region=x, 
                                         header=FALSE,
                                         autofitRow = FALSE,
                                         autofitCol = FALSE))
于 2015-10-28T21:16:52.697 回答