我有一堆Excel电子表格,我需要从中读取某些单元格。我已经构建了一个循环来浏览所有工作簿和工作表,但我已经放弃了下面的问题中的循环来简化。
并非所有工作表或单元格都会填充数据,但如果单元格为空,则XLConnect返回空数据框,从而导致错误。
要重现,请在工作目录中创建名为xlsx
的{{1}}文件。在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
等字符串。
答案 0 :(得分:1)
试试这个:
sapply(positionsToRead,
function(x) readWorksheetFromFile("testFile.xlsx",
sheet='Sheet1',
region=x,
header=FALSE,
autofitRow = FALSE,
autofitCol = FALSE))