我有一堆 Excel 电子表格,我需要从中读取某些单元格。我已经建立了一个循环来遍历所有工作簿和工作表,但是为了简化我已经放弃了下面问题中的循环。
并非所有工作表或单元格都会填充数据,但如果单元格为空白,XLConnect 会返回一个空数据框,从而导致错误。
要重现,xlsx
请在您的工作目录中创建一个名为testFile.xlsx
. 在 上,在单元格和Sheet1
中键入您想要的任何内容,然后保存并关闭文件。然后运行下面的代码。A1
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
有一个SetMissing
功能,但它似乎是用于定义像blank
to之类的字符串NA
。