如何使用 Openxlsx 将 data.frame 保存到 Excel 然后重新使用
HOWTO Save a data.frame to Excel with Openxlsx and then reuse
我添加了一个小例子来演示这个问题
library("readxl")
library("openxlsx")
df <- data.frame(QN=1, ST = "String", EL=cbind(list(c("Var1", "Var2"))), BL=FALSE)
cat(paste0("\nQ=", as.numeric(df$QN[[1]])))
cat(paste0("\nST=", as.character(df$ST[[1]])))
cat(paste0("\nEL=", as.character(df$EL[[1]])))
cat(paste0("\nBL=", as.logical(df$BL[[1]])))
wb <- createWorkbook("TEST")
addWorksheet(wb, "Data")
writeData(wb, sheet = 1, df)
saveWorkbook(wb, file = "Test.xlsx", overwrite = TRUE)
df2 <- read_excel(sheet = 1, "Test.xlsx")
cat(paste0("\n\nQ2=", as.numeric(df2$QN[[1]])))
cat(paste0("\nST2=", as.character(df2$ST[[1]])))
cat(paste0("\nEL2=", as.character(df2$EL[[1]])))
cat(paste0("\nBL2=", as.logical(df2$BL[[1]])))
输出看起来像这样
Q=1
ST=String
EL=Var1
EL=Var2
BL=FALSE
Q2=1
ST2=String
EL2=Var1, Var2
BL2=FALSE
当我使用 view(df) 查看数据框时,我看到了这个:
c("Var1", "Var2") for EL
当我查看第二个日期框时,我看到了:
Var1, Var2 for EL
注意 EL 和 EL2 之间的区别。我要EL2匹配EL。
--- 原始问题 ---
我有一个简单的数据框,看起来像这样(我只列出一个元素):
cElementNames
c("Roles_1", "Roles_2", "Roles_3")
我使用以下代码将数据框保存到 Excel:
writeData(wb, sheet = iSheet, df, startCol = 1, startRow = 1)
该列在 Excel 文件中如下所示:
Roles_1、Roles_2、Roles_3
我使用以下代码将 Excel 文件读回 data.frame:
df <- read_excel(sheet = 1, ExcelFile)
元素现在看起来像这样:
"Roles_1, Roles_2, Roles_3"
并且在我的代码中不可用。
我正在使用 data.frame 来保存配置选项,以便生成报告。我宁愿从 Excel 中读取配置信息,也不愿在我的代码中对其进行硬编码。
由于我是新手,我会采纳任何我能得到的建议。
谢谢
有了你的额外信息,我可以用 base
个包来做到这一点。
df2$EL2 <- lapply(strsplit(df2$EL, ","), trimws, "l")
identical(df2$EL2[1], df$EL[1])
现在你的内容和以前一样了。
我添加了一个小例子来演示这个问题
library("readxl")
library("openxlsx")
df <- data.frame(QN=1, ST = "String", EL=cbind(list(c("Var1", "Var2"))), BL=FALSE)
cat(paste0("\nQ=", as.numeric(df$QN[[1]])))
cat(paste0("\nST=", as.character(df$ST[[1]])))
cat(paste0("\nEL=", as.character(df$EL[[1]])))
cat(paste0("\nBL=", as.logical(df$BL[[1]])))
wb <- createWorkbook("TEST")
addWorksheet(wb, "Data")
writeData(wb, sheet = 1, df)
saveWorkbook(wb, file = "Test.xlsx", overwrite = TRUE)
df2 <- read_excel(sheet = 1, "Test.xlsx")
cat(paste0("\n\nQ2=", as.numeric(df2$QN[[1]])))
cat(paste0("\nST2=", as.character(df2$ST[[1]])))
cat(paste0("\nEL2=", as.character(df2$EL[[1]])))
cat(paste0("\nBL2=", as.logical(df2$BL[[1]])))
输出看起来像这样
Q=1
ST=String
EL=Var1
EL=Var2
BL=FALSE
Q2=1
ST2=String
EL2=Var1, Var2
BL2=FALSE
当我使用 view(df) 查看数据框时,我看到了这个:
c("Var1", "Var2") for EL
当我查看第二个日期框时,我看到了:
Var1, Var2 for EL
注意 EL 和 EL2 之间的区别。我要EL2匹配EL。
--- 原始问题 --- 我有一个简单的数据框,看起来像这样(我只列出一个元素):
cElementNames
c("Roles_1", "Roles_2", "Roles_3")
我使用以下代码将数据框保存到 Excel:
writeData(wb, sheet = iSheet, df, startCol = 1, startRow = 1)
该列在 Excel 文件中如下所示: Roles_1、Roles_2、Roles_3
我使用以下代码将 Excel 文件读回 data.frame:
df <- read_excel(sheet = 1, ExcelFile)
元素现在看起来像这样: "Roles_1, Roles_2, Roles_3"
并且在我的代码中不可用。
我正在使用 data.frame 来保存配置选项,以便生成报告。我宁愿从 Excel 中读取配置信息,也不愿在我的代码中对其进行硬编码。
由于我是新手,我会采纳任何我能得到的建议。
谢谢
有了你的额外信息,我可以用 base
个包来做到这一点。
df2$EL2 <- lapply(strsplit(df2$EL, ","), trimws, "l")
identical(df2$EL2[1], df$EL[1])
现在你的内容和以前一样了。