我正在尝试使用openxlsx::write.xlsx
将结果写入R中的Excel电子表格中。
如果文件存在并且要添加新表,则可以使用append=T
。除了使用是否检查文件之外,还有什么方法可以自动检查?
如果文件和工作表都存在并且要更新此工作表,我应该如何覆盖结果?谢谢。
答案 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)