【问题标题】:Read and write excel file with comments读写带有注释的excel文件
【发布时间】:2018-07-17 14:39:34
【问题描述】:

问。我正在寻找一种方法来在读取和操作后保留 excel 文件的 cmets。

0。我的excelfile:(不能和你分享!)

1.我想这样读:(将 excel 中的 col 注释作为 R 中的 col 注释)

(使用任何可以执行此操作的库。最好使用 openxlsx)

df<- data.frame(a=1:3,b=4:6,c=7:9)
comment(df$a) <- "Random comment" #is there a better practice to preserve the excel comment?

2。随机操作数据:

df[2:3] <- df[2:3] * 2
df$d    <- "funny"

3.保存数据(应该如下所示:)

编辑:

library(openxlsx)

wb <- loadWorkbook("commented.xlsx")
df <- readWorkbook(wb)

df[2:3] <- df[2:3] * 2
df$d    <- "funny"
df <- rev(df)
df <- df[order(df$a,decreasing = T),]

writeData(wb, 1, df)
saveWorkbook(wb, "modified.xlsx")

到目前为止,一个很棒的解决方案!

  1. 从这个小例子可以看出,cmets 保持静止。
  2. 我得到额外的空̶“COMMENT弹出窗口”̶以我所得̶f̶i̶l̶e̶.̶只是我?̶(解决办法可用!) LI>

【问题讨论】:

  • 你可以试试 tidyxl package。我不确定其他人是否会关注格式或 cmets。
  • tidyxl 据我所知是不允许写的。
  • 您是否希望 cmets 遵循数据转换?这样在示例中,评论将与 "a" 单元格一起移动到 D1?
  • 当然,如果可能的话,那就太好了。 (我知道我的 OP 中没有包含那个案例 ':))
  • 是的,我知道这会有什么用。但是,我想不出一个简单的方法来解决这个问题。使用writeData(),您基本上只是重写数据而不是实际移动单元格,因此它不会“自动”得到处理。也许其他人会为此提出解决方案。

标签: r excel


【解决方案1】:

您可以使用 openxlsx 执行此操作:使用 loadWorkbook() 读取原始文件,修改您想要的数据,最后使用 saveWorkbook()。 cmets 将被保留:

library(openxlsx)

wb <- loadWorkbook("commented.xlsx")
df <- readWorkbook(wb)

df[2:3] <- df[2:3] * 2
df$d    <- "funny"

writeData(wb, 1, df)
saveWorkbook(wb, "modified.xlsx")

unlink(c("commented.xlsx", "modified.xlsx"))

样本数据

library(openxlsx)

wb <- createWorkbook("unknown")
addWorksheet(wb, "Sheet 1")

df <- data.frame(a = 1:3, b = 4:6, c = 7:9)
writeData(wb, 1, df)

comment <- createComment("Random comment")
writeComment(wb, 1, 1, 1, comment)

saveWorkbook(wb, "commented.xlsx")

【讨论】:

  • 谢谢 Mikko,太好了!你能看看我在我问题的edit 部分的评论吗?
  • @AndreElrico 我看了看,似乎空的 cmets 在 Excel 文件中“可见”的任何 cmets 上都显示为 loadWorkbook()。似乎是一个错误;目前的解决方法是在阅读之前隐藏 cmets。
  • opened an issue 关于这个。
猜你喜欢
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 1970-01-01
  • 2019-01-17
  • 1970-01-01
相关资源
最近更新 更多