将数据导出到Excel表格中特定的单元格

10

我需要将 R 中的数据框导出到 Excel 表格中,可以通过以下方式完成:

require("xlsx")
write.xlsx(x, file, sheetName="Sheet1", col.names=TRUE, 
    row.names=TRUE, append=FALSE, showNA=TRUE)

我导出的数据将从Excel表格中的单元格"A1"开始粘贴。我还可以设置append=TRUE,使数据添加到工作表的末尾。

有没有可能将它放在一个特定的单元格中?我需要将数据框导出到以单元格C10开头的范围内。这是否可能?

更新: 该工作表包含行1-9和列A-B中的数据。因此,无法仅向数据框添加空单元格并将其粘贴到Excel表格中,因为这些空单元格会擦除数据。

2个回答

7
您可以使用软件包XLConnect完成此操作。
library(XLConnect)
wb <- loadWorkbook("File_result.xlsx"), create = TRUE)
createSheet(wb, name = "Sheet1")

# here, you can set the startRow and startCol. Col A = 1, B = 2,...
writeWorksheet(wb,x,"Sheet1",startRow = 10, startCol = 3, header = TRUE)

# automatically adjust column width
setColumnWidth(wb, sheet = "Sheet1", column = 3:4, width = -1)
saveWorkbook(wb)

3
需要说明的是(截至2020年),如果已经安装了XLSX包及其依赖项,则需要卸载XLSX和XLConnect(以及XLSX的依赖项),然后重新安装XLConnect,因为存在一些依赖关系和软件包之间的冲突。 - PM0087
XLConnect需要Java(https://rpubs.com/neelok/xlconnect) 我发现在中等大小的工作表上,它很容易耗尽内存 如果您正在使用R Studio库(reticulate)+ {python}块,使用import openpyxl也可以实现相同的功能,但这显然不是一个R解决方案。 - Peter King

1
您可以使用空数据填充空单元格:
data <- matrix(1:100, ncol=5)
col.offset <- 2
row.offset <- 9
emptycols <- matrix("", ncol=col.offset, nrow=nrow(data))
data <- cbind(emptycols, data)
emptyrows <- matrix("", nrow=row.offset, ncol=ncol(data))
data <- rbind(emptyrows, data)
write.table(data, "test.csv", row.names=FALSE, col.names=FALSE)

或者,如果您想保留原始数据:

data <- matrix(1:100, ncol=5)
col.offset <- 2
row.offset <- 9
orig.data <- as.matrix(read.csv("test.csv", header=FALSE, stringsAsFactors=FALSE))
orig.cols <- orig.data[1:nrow(data), 1:col.offset]
data <- cbind(orig.cols, data)
orig.rows <- orig.data[1:row.offset, 1:ncol(data)]
data <- rbind(orig.rows, data)

1
是的,这段代码会删除原始数据。在这种情况下,您需要先读取原始数据,而不是创建空列和行,然后才能将其绑定到生成的新数据上。 - Molx
我已经想到了这种方法。这是一个解决方案,但不是很好的解决方案。有更简单的方法吗? - Dom
好的,我想你可以适应read.xlsx。请注意,如果原始数据中至少有一个字符串,那么所有数据都将是字符串,因为它被保存为matrix而不是data.frame - Molx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接