当Excel文件存在或工作表存在时如何在R中使用write.xlsx

时间:2020-01-03 21:41:22

标签: r excel openxlsx

我正在尝试使用openxlsx::write.xlsx将结果写入R中的Excel电子表格中。

  1. 如果文件存在并且要添加新表,则可以使用append=T。除了使用是否检查文件之外,还有什么方法可以自动检查?

  2. 如果文件和工作表都存在并且要更新此工作表,我应该如何覆盖结果?谢谢。

2 个答案:

答案 0 :(得分:1)

这是openxlsx的答案。为了演示,我们需要一些数据。

## Create a simple test file 
library(openxlsx)
hs <- createStyle(textDecoration = "Bold")
l <- list("IRIS" = iris, "MTCARS" = mtcars)
write.xlsx(l, file = "TestFile.xlsx", borders = "columns", headerStyle = hs)

问题1

您可以使用

检查文件是否存在
## Check existence of file
file.exists("TestFile.xlsx")

您可以检查工作簿中是否存在选项卡(工作表)

## Check available sheets
getSheetNames("TestFile.xlsx")

问题2的步骤:
1.将文件读入Workbook对象。
2.将数据从要修改的工作表中拉入data.frame。
3.修改data.frame以进行品尝
4.将数据保存回工作簿中
5.将工作簿保存到磁盘
为了使用一个简单的示例,让我们创建一个简单的测试文件。

## Load existing file
wb = loadWorkbook("TestFile.xlsx")

## Pull all data from sheet 1
Data = read.xlsx(wb, sheet=1)

## Change a single element for demonstration
## ** Beware!! **    Because of the header,
##   the 2,2 position in the data 
##   is row 3 column 2 in the spreadsheet
Data[2,2] = 1492

## Put the data back into the workbook
writeData(wb, sheet=1, Data)

## Save to disk
saveWorkbook(wb, "TestFile.xlsx", overwrite = TRUE)

您可以打开电子表格并检查是否已进行更改。

如果您想完全更改工作表(如您的评论所示), 您可以删除旧工作表,然后用新工作表替换 使用相同的名称。

removeWorksheet(wb, "IRIS")
addWorksheet(wb, "IRIS")
NewData = data.frame(X1=1:4, X2= LETTERS[1:4], X3=9:6)
writeData(wb, "IRIS", NewData)
saveWorkbook(wb, "TestFile.xlsx", overwrite = TRUE)

答案 1 :(得分:0)

您可以检查工作表是否存在,如果存在,将其删除,如果不将其附加到现有文件中,则该命令还将创建文件(如果不存在)。

library(xlsx)

path <- "testing.xlsx"
sheet_name = "new_sheet"

data <-
  data.frame(
    B = c(1, 2, 3, 4)
  )

if(sheet_name %in% names(getSheets(loadWorkbook(path)))){
  wb <- loadWorkbook(path)
  removeSheet(wb, sheetName = sheet_name)
  saveWorkbook(wb, path)
}

write.xlsx(data, path, sheetName = sheet_name, append = TRUE)