将数据从R传输到XLSX文件的特定工作表和特定范围

时间:2018-07-12 13:11:06

标签: r excel xlsx

我正在尝试将矩阵(或数据帧)从R传输到MS xlsx文件。

我知道xlsx包没有提供很多将数据粘贴到xlsx工作表的特定范围的选项(我发现的唯一选项是addDataFrame函数,该函数很难处理) ),并且同时保存工作簿(xlsx::saveWorkbook)的功能需要花费大量时间。

因此,我尝试使用openxlsx包及其writeData函数。

这是我的代码:

WB = loadWorkbook(file = paste(Out_dir, Out_FN, sep="")) writeData(wb=WB, sheet = "sheetName", x = Data, startRow = 11, startCol = 5, colNames = FALSE, rowNames = FALSE)

其中Out_dirOut_FN是要在其中传输数据的目录和xlsx文件名。

尽管,当我使用loadWorkbook函数时,我收到以下错误消息:

  

grepl(target,commentsXML)中的错误:无效的“模式”参数

任何提出的解决方案将不胜感激。

2 个答案:

答案 0 :(得分:0)

我认为您代码的问题是目录的粘贴功能。如果文件路径中没有/,则会收到错误消息。如果您将工作簿保存到名为Book3.xlsx的工作目录中,然后尝试以下代码。它应该为您提供openxlsx软件包功能的工作示例,并提供产生所需结果的命令。

library(openxlsx)
out_dir<-paste0(getwd(),"/")
out_file<-"Book3.xlsx"
df<-data.frame(a=c(1,2,3), b=c("a","b","c"))
wb<- loadWorkbook(paste0(out_dir,out_file))
addWorksheet(wb,"sheetName")
writeData(wb,"sheetName",df)
saveWorkbook(wb, out_file, overwrite = TRUE)

答案 1 :(得分:0)

这里有几个可供您考虑的选项。

library(xlsx) #load the package
# we'll assume your spreadsheet will be 20 rows & 8 columns
m <- (matrix('',nrow = 20,ncol = 8)) # '' removes NA from your final spreadsheet
# place values in specific cells 
m[10,2] <- c("B10") # as B10 is in row 10 and column 2
m[20,8] <- c("H20")
# export as xlsx
write.xlsx(x = m, file = "C:/your_path_here/Book1.xlsx",sheetName = "Sheet1", row.names = FALSE, col.names=FALSE)
## ######## #######
library(xlsx)
# load file contents
file <- "C:/your_path_here/Book1.xlsx"
wb <- loadWorkbook(file)
sheets <- getSheets(wb)
sheet <- sheets[[1]]  # or another
# data to put into B10:H20 range
data <- matrix(runif(7*11), nrow=11, ncol=7)
# modify contents
addDataFrame(data, sheet, col.names = FALSE, row.names = FALSE,
    startRow = 10, startColumn = 2)
# save to disk
saveWorkbook(wb, file)
## ######## #######
library(XLConnect)
wb <- loadWorkbook("C:/your_path_here/Book10.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)
## ######## #######

您可以使用xlsx包写入多张纸。您只需要为每个数据框使用不同的sheetName,并需要添加append = TRUE:

library(xlsx)
write.xlsx(dataframe1, file="filename.xlsx", sheetName="sheet1")
write.xlsx(dataframe2, file="filename.xlsx", sheetName="sheet2", append=TRUE)