编辑 Excel 工作表的特定单元格

Nut*_*tle 4 excel r xlconnect

我有一个 Excel 工作簿,我想使用 R 编辑/填充其中的某些特定单元格,而不更改任何格式。

到目前为止,我已经尝试过XLConnect包,它似乎可以做我正在寻找的东西,我只是没有找到一种方法来做到这一点。

我解决这个问题的直接方法:

wb <- loadWorkbook("file1.xls")
data1 <- readWorksheet(wb, "Sheet1", header=TRUE)

## adding a value to a particular cell:
data1[11,12] <- 3.2 

## rewriting old data:
writeWorksheet(wb, data1, "Sheet1")
saveWorkbook(wb, "new_file1.xls")
Run Code Online (Sandbox Code Playgroud)

但是,这样新工作簿会丢失所有以前的格式(合并的单元格、公式等)。

有没有办法在不丢失剩余工作表的任何格式的情况下更改某些单元格中的值?

jlh*_*ard 8

这是一个使用 R 自动化 Excel 的示例。

library(RDCOMClient)
xlApp <- COMCreate("Excel.Application")
wb    <- xlApp[["Workbooks"]]$Open("file.1.xls")
sheet <- wb$Worksheets("Sheet1")

# change the value of a single cell
cell  <- sheet$Cells(11,12)
cell[["Value"]] <- 3.1

# change the value of a range
range <- sheet$Range("A1:F1")
range[["Value"]] <- paste("Col",1:6,sep="-")

wb$Save()                  # save the workbook
wb$SaveAS("new.file.xls")  # save as a new workbook
xlApp$Quit()               # close Excel
Run Code Online (Sandbox Code Playgroud)

  • 请注意:RDCOMClient 包仅适用于 Windows。这是在评论中,但我想说清楚,以便 Unix 用户不要浪费时间。 (2认同)

Vin*_*der 6

如果您不需要使用公式,您有 2 种可能的解决方案。

您可以使用 {xlsx} 包:

library(xlsx)
xlsx::write.xlsx(x = head(iris),file = "source3.xlsx",sheetName = "A")
hop3 <- xlsx::loadWorkbook(file = "source3.xlsx")
sheets <- getSheets(hop3)
rows  <- getRows(sheets$A,rowIndex = 2)   # get all the rows
cc <- getCells(rows,colIndex = 3) 
xlsx::setCellValue(cc[[1]],value = "54321")
hop3$setForceFormulaRecalculation(TRUE)
xlsx::saveWorkbook(hop3,file = "output3.xlsx")
Run Code Online (Sandbox Code Playgroud)

您还可以使用 {XLconnect}

library(XLConnect)    
XLConnect::writeWorksheetToFile(file = "source2.xlsx",data = head(iris),sheet="A")
hop2 <- XLConnect::loadWorkbook(file = "source2.xlsx")
createName(hop2, name = "plop", formula = "A!C2")
writeNamedRegion(hop2, 12345, name = "plop", header = FALSE)
Run Code Online (Sandbox Code Playgroud)

问候


Cep*_*irk 5

使用XLC$STYLE_ACTION.NONE样式操作应该添加数据而不更改任何格式:

data1 <- readWorksheetFromFile("file1.xls", "Sheet1")

## adding a value to a particular cell:
data1[11,12] <- 3.2 

## rewriting old data:
writeWorksheetToFile("file1.xls", data1, "Sheet1", styleAction = XLC$STYLE_ACTION.NONE)
Run Code Online (Sandbox Code Playgroud)

感谢马丁在评论中提出研究这个问题的建议。