如何使用 R 更改 excel 文件中的单个条目而不是整个数据 sheet?
How can you change single entries in an excel file with R and not the entire data sheet?
我有一个 excel 文件,里面有一些数据。我想使用 R 来 运行 一些关于 sheet 的统计数据,然后将一些值保存到原始 Excel Sheet 中的不同列中。
有没有办法做到这一点而不总是 "overwriting" 整个 excel 文件?
My_data <- read_xlsx("MeasurementData.xlsx", sheet = "Data_Overview")
data$Column1[1] = "result"
write.xlsx(My_data, file="MeasurementData.xlsx", sheetname="Data_Overview" )
所以我试图用这段代码做的是打开我的 xlsx 文件,将其中的一个条目更改为 "result",然后将整个略微更改的数据帧重写到 xlsx 文件中。
但是我想要的是不重写整个文件,而只重写 overwrite/replace 更改的条目。
有什么办法吗?
谢谢!
我建议您改用 openxlsx
程序包,您可以在其中更新特定 sheet 中的特定单元格,而不会破坏文件中的其他 sheet。
这是一个例子:
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")
正如您将看到的,格式没有改变,文件中还有另一个 sheet 包含填充数据的图表也完好无损。
您可以将 x
设置为单个值(如您的示例所示)并根据需要设置位置(使用 startCol
和 startRow
。
希望您觉得它有用。
我使用的解决方案如下:
- 用一些数据创建一个 excel 文件。
- 使用以下命令在 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
- 用户现在可以在数据帧上执行他想要的所有操作Data_Info。
- 要将更改后的数据帧 (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)
最后一步要小心,因为它会覆盖之前的文件。另请注意,最后一步仅在 excel 文件当前未打开时才有效,否则将出现 error/warning。
我有一个 excel 文件,里面有一些数据。我想使用 R 来 运行 一些关于 sheet 的统计数据,然后将一些值保存到原始 Excel Sheet 中的不同列中。 有没有办法做到这一点而不总是 "overwriting" 整个 excel 文件?
My_data <- read_xlsx("MeasurementData.xlsx", sheet = "Data_Overview")
data$Column1[1] = "result"
write.xlsx(My_data, file="MeasurementData.xlsx", sheetname="Data_Overview" )
所以我试图用这段代码做的是打开我的 xlsx 文件,将其中的一个条目更改为 "result",然后将整个略微更改的数据帧重写到 xlsx 文件中。 但是我想要的是不重写整个文件,而只重写 overwrite/replace 更改的条目。
有什么办法吗? 谢谢!
我建议您改用 openxlsx
程序包,您可以在其中更新特定 sheet 中的特定单元格,而不会破坏文件中的其他 sheet。
这是一个例子:
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")
正如您将看到的,格式没有改变,文件中还有另一个 sheet 包含填充数据的图表也完好无损。
您可以将 x
设置为单个值(如您的示例所示)并根据需要设置位置(使用 startCol
和 startRow
。
希望您觉得它有用。
我使用的解决方案如下:
- 用一些数据创建一个 excel 文件。
- 使用以下命令在 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
- 用户现在可以在数据帧上执行他想要的所有操作Data_Info。
- 要将更改后的数据帧 (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)
最后一步要小心,因为它会覆盖之前的文件。另请注意,最后一步仅在 excel 文件当前未打开时才有效,否则将出现 error/warning。