XLConnect 导致空单元格失败
XLConnect causing failures on empty cells
我有一堆 Excel 电子表格,我需要从中读取某些单元格。我已经构建了一个循环来遍历所有工作簿和工作表,但我已经放弃了下面问题中的循环以简化。
并非所有工作表或单元格都会填充数据,但如果单元格为空,则 XLConnect return 会生成一个空数据框,从而导致错误。
要复制,请在您的工作目录中创建一个名为 testFile.xlsx
的 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)))
第一个会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
函数,但它似乎是用来定义字符串的,比如 blank
到 NA
.
试试这个:
sapply(positionsToRead,
function(x) readWorksheetFromFile("testFile.xlsx",
sheet='Sheet1',
region=x,
header=FALSE,
autofitRow = FALSE,
autofitCol = FALSE))
我有一堆 Excel 电子表格,我需要从中读取某些单元格。我已经构建了一个循环来遍历所有工作簿和工作表,但我已经放弃了下面问题中的循环以简化。
并非所有工作表或单元格都会填充数据,但如果单元格为空,则 XLConnect return 会生成一个空数据框,从而导致错误。
要复制,请在您的工作目录中创建一个名为 testFile.xlsx
的 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)))
第一个会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
函数,但它似乎是用来定义字符串的,比如 blank
到 NA
.
试试这个:
sapply(positionsToRead,
function(x) readWorksheetFromFile("testFile.xlsx",
sheet='Sheet1',
region=x,
header=FALSE,
autofitRow = FALSE,
autofitCol = FALSE))