【发布时间】:2020-11-05 12:36:37
【问题描述】:
我有一个包含 8 个工作表的 Excel 电子表格。每个工作表都有不同的数据,我有一个 R 代码来更新它们。
我的问题是:有没有办法将.xlsx 文件导出到R 中以仅更新我的Excel 文件中的一个特定工作表,而不用将整个电子表格替换为新文件?
在我之前的尝试中,使用 openxlsx 包,我刚刚创建了一个全新的文件,这并没有解决我的问题。
【问题讨论】:
我有一个包含 8 个工作表的 Excel 电子表格。每个工作表都有不同的数据,我有一个 R 代码来更新它们。
我的问题是:有没有办法将.xlsx 文件导出到R 中以仅更新我的Excel 文件中的一个特定工作表,而不用将整个电子表格替换为新文件?
在我之前的尝试中,使用 openxlsx 包,我刚刚创建了一个全新的文件,这并没有解决我的问题。
【问题讨论】:
您可以使用以下代码解决此问题。
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)
【讨论】:
%T>%而不是%>%?
您可以使用以下工作流程来实现它:
# 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'。
【讨论】:
getSheets是哪个包?
library(xlsx)。所有功能都内置在 xlsx 包中。检查一下,让我知道它是否适合你!