问题描述
我有一个包含8个工作表的Excel电子表格。每个工作表都有不同的数据,我有一个R
代码来更新它们。
我的问题是:是否可以导出.xlsx
中的R
文件,以仅更新Excel文件中的一个特定工作表,而无需将整个电子表格替换为新文件?
在先前的尝试中,我使用openxlsx
包创建了一个全新的文件,但这并不能解决我的问题。
解决方法
您可以使用以下工作流程来实现:
# load environment
library(xlsx)
# define file path
file_path = '/home/user/Downloads/my_sheet.xlsx'
# load file as a workbook
file = loadWorkbook(file_path)
# check the sheets in the file
tbls = getSheets(file)
# remove the sheet you want to change
removeSheet(file,sheetName = "Sheet1")
# start a new from scratch
new_sheet = createSheet(file,sheetName = "Sheet1")
# create a dataframe
df = data.frame()
# link the dataframe to the new sheet
addDataFrame(df,new_sheet,row.names = FALSE)
# save the workbook/file
saveWorkbook(file,file_path)
您可以使用read.xlsx(file,sheetIndex,sheetName)
将旧表作为数据框导入,而不是从头开始创建新的数据框。
注意:如果使用短文件路径,例如'~/Downloads/my_sheet.xlsx'
,则会引发错误。
您可以使用以下代码解决此问题。
library(migrittr)
library(openxslx)
file_path = '/home/user/Downloads/my_sheet.xlsx'
df <- data.frame()
file_path %>%
loadWorkbook() %T>%
removeWorksheet(sheet = "Sheet1") %T>%
addWorksheet(sheetName = "Sheet1") %T>%
writeData(sheet = "Sheet1",x = df) %T>%
saveWorkbook(.,file = '/home/user/Downloads/my_sheet.xlsx',overwrite = T)