openxlsx::write.xlsx 覆盖现有工作表而不是追加

6 浏览
0 Comments

openxlsx::write.xlsx 覆盖现有工作表而不是追加

openxlsx::write.xlsx函数正在覆盖电子表格,而不是添加另一个选项卡。\n我尝试按照Stackoverflow的一些指导方针,但没有成功。\n

dt.escrita <- format(Sys.time(), '%Y%m%d%H%M%S')
write.xlsx( tbl.messages
           ,file = paste('.\\2_Datasets\\messages_',dt.escrita,'.xlsx')
           ,sheetName = format(Sys.time(), '%d-%m-%y')
           ,append = FALSE)
write.xlsx( tbl.dic.dados
            ,file = paste('.\\2_Datasets\\messages_',dt.escrita,'.xlsx')
            ,sheetName = 'Dicionario_Dados'
            ,append = TRUE)

\n一个包含两个选项卡的电子表格,分别命名为30-07-19和Dicionario_Dados。

0
0 Comments

问题出现的原因是在使用openxlsx包中的write.xlsx函数时,如果目标文件已经存在且包含同名的工作表,则默认的行为是覆盖已有的工作表,而不是将新的数据追加到工作表的末尾。

要解决这个问题,可以通过设置append参数为TRUE来将新的数据追加到工作表的末尾。具体的解决方法如下:

library(openxlsx)
df_lst <- setNames(list(tbl.messages, tbl.dic.dados), as.list(c(format(Sys.time(), '%d-%m-%y'), 'Dicionario_Dados')))
write.xlsx(df_lst, file = paste0('.\\2_Datasets\\messages_',dt.escrita,'.xlsx'), append = TRUE)

通过将append参数设置为TRUE,可以确保新的数据被追加到现有工作表的末尾,而不是覆盖已有的工作表。这样可以避免数据的丢失并保留已有数据。

0
0 Comments

在上述代码中,使用了openxlsx包的write.xlsx函数将两个不同的dataframe写入同一个xlsx文件的不同sheet中。第一个dataframe被写入到名为"sheet1"的sheet中,而第二个dataframe被写入到名为"sheet2"的sheet中,并使用了append=TRUE参数来实现在已有sheet后追加写入数据的功能。

然而,通过openxlsx包的write.xlsx函数无法实现在已有sheet后追加写入数据的功能,而是会覆盖已有sheet中的数据。这是因为openxlsx包的write.xlsx函数并没有提供类似xlsx包的append参数来控制是否追加写入数据。

要解决这个问题,可以使用openxlsx包的loadWorkbook函数先加载已有的xlsx文件,然后使用addWorksheet函数添加新的sheet,最后使用writeData函数将数据写入新的sheet中。具体代码如下:

library(openxlsx)
wb <- loadWorkbook("filename.xlsx")
addWorksheet(wb, "sheet2")
writeData(wb, "sheet2", dataframe2)
saveWorkbook(wb, "filename.xlsx", overwrite = TRUE)

通过以上代码,首先使用loadWorkbook函数加载已有的xlsx文件,然后使用addWorksheet函数在加载的workbook中添加一个名为"sheet2"的新sheet,接着使用writeData函数将dataframe2的数据写入到"sheet2"中。最后,使用saveWorkbook函数将修改后的workbook保存回原始的xlsx文件中,并通过overwrite参数来覆盖已有文件。这样就实现了在已有sheet后追加写入数据的功能。

需要注意的是,这里的writeData函数是openxlsx包中的函数,用于将数据写入到指定的sheet中。而不同于xlsx包中的write.xlsx函数,openxlsx包中的write.xlsx函数仅用于将dataframe写入到新创建的xlsx文件中的指定sheet中,并不支持追加写入数据的功能。

0
0 Comments

问题出现的原因是在使用openxlsx包中的write.xlsx函数时,没有提供append参数来追加数据到现有的工作表中。解决方法是使用writeData函数,并通过指定startRow参数来确定数据的起始行,以实现将数据追加到现有工作表中的效果。

具体来说,可以按照以下步骤解决问题:

1. 首先,创建一个新的工作簿对象wb,并使用addWorksheet函数创建两个工作表mtcars1和mtcars2。

2. 然后,使用writeData函数将mtcars1的数据写入到mtcars1工作表的第一行第一列。

3. 接下来,使用writeData函数将mtcars2的数据追加到mtcars2工作表的最后一行。

4. 最后,使用saveWorkbook函数将修改后的工作簿保存为excel_test.xlsx文件,并设置overwrite参数为TRUE来覆盖现有的文件。

此外,在更新中提到了使用write.xlsx函数时的一些注意事项。首先,write.xlsx函数没有append参数,因此无法直接实现追加数据到现有工作表的功能。其次,在调用write.xlsx函数时,即使传入了未知的参数,函数也不会报错。

在第二次更新中,提供了另一种追加数据到现有工作表的方法。首先,使用loadWorkbook函数读取现有的excel_test.xlsx文件,并获取现有工作表的行数。然后,将行数加1,并将其作为startRow参数传递给writeData函数,从而实现将数据追加到现有工作表的功能。最后,使用saveWorkbook函数保存修改后的工作簿,并设置overwrite参数为TRUE来覆盖现有文件。

需要注意的是,在使用writeData函数后,文件中的列名会消失,因为原始文件中的第一行变为空。

0