如何使用 R 更改 Excel 文件中的单个条目而不是整个数据表?

ike*_*mpf 5 excel replace export r overwrite

我有一个 excel 文件,里面有一些数据。我想使用 R 在所述工作表上运行一些统计信息,然后将一些值保存到原始 Excel 工作表的不同列中。有没有办法做到这一点而不总是“覆盖”整个excel文件?

My_data <- read_xlsx("MeasurementData.xlsx", sheet = "Data_Overview")
data$Column1[1] = "result"
write.xlsx(My_data, file="MeasurementData.xlsx", sheetname="Data_Overview" )
Run Code Online (Sandbox Code Playgroud)

所以我试图用这段代码做的是打开我的 xlsx 文件,将其中的一个条目更改为“结果”,然后将整个稍微改变的数据帧重写到 xlsx 文件中。但是我想要的是不重写整个文件而只覆盖/替换更改的条目。

有没有办法做到这一点?谢谢!

Tee*_*Kea 5

我建议您改用该openxlsx包,您可以在其中更新特定工作表中的特定单元格,而不会损坏文件中的其他工作表。

下面是一个例子:

install.packages("openxlsx")
library(openxlsx)
wb <- loadWorkbook("https://github.com/awalker89/openxlsx/files/744103/template.xlsx")

writeData(wb, sheet = "Iris Data", x = head(iris, 20))
saveWorkbook(wb, "populated_template.xlsx")
openXL("populated_template.xlsx")
Run Code Online (Sandbox Code Playgroud)

正如您将看到的,格式没有改变,并且文件中包含填充数据绘图的另一个工作表也完好无损。

您可以设置x为单个值(如您的示例中所示)并根据需要设置位置(使用startColstartRow.

希望你觉得它有用。


ike*_*mpf 1

我使用的解决方案的工作原理如下:

  1. 创建一个包含一些数据的 Excel 文件。
  2. 使用以下命令在 R Studio 中打开 excel 文件:
  File <- excel_file #path to excel file "Data_Analysis.xlsx" for example
  sheet <- "Info"
  wb <- openxlsx::loadWorkbook(file = File)

  #Read a section of a sheet called "Info" from the Excel File
  Data_Info <- openxlsx::read.xlsx(wb, sheet = sheet,
                                   colNames = FALSE, #Column Names are there
                                   rows = seq(1:4), #Copy out these rows
                                   cols = seq(1:5)) #Copy out these columns

Run Code Online (Sandbox Code Playgroud)
  1. 用户现在可以对数据帧 Data_Info 执行他想要的所有操作。
  2. 要将更改后的数据帧 (NEW_DATAFRAME_TO_BE_SAVED) 保存回 Excel 文件,请使用以下代码:

  openxlsx::writeData(wb, sheet = sheet, x = NEW_DATAFRAME_TO_BE_SAVED,
            startCol = "A",
            startRow = 2,
            colNames = FALSE) # Do not print Header Line with Column Names
  openxlsx::saveWorkbook(wb2, File, overwrite = TRUE)
Run Code Online (Sandbox Code Playgroud)

请小心最后一步,因为它会覆盖以前的文件。另请注意,最后一步仅在 Excel 文件当前未打开的情况下才有效,否则会出现错误/警告。