Как добавить несколько комментариев в книгу Excel с помощью openxlsx?

В описании функции createComment openxlsx указано, что комментарий может быть «вектором символов» и, следовательно, применяться к нескольким ячейкам.

Однако добавление комментария, похоже, ограничено одной ячейкой.

Есть ли способ добавить несколько комментариев к диапазону ячеек, используя вектор символов?

Я что-то пропустил или это запрос на улучшение?

Этот MWE завершается со следующим сообщением: «Ошибка в comment_list[[i]]$style[[j]]: нижний индекс выходит за пределы»

library(openxlsx)

x <- as.data.frame(matrix(1:12, nrow = 3))
names(x) <- letters[1:4]

comment_vector <- paste("Comment", 1:4)

wb <- createWorkbook()
addWorksheet(wb, 1)

header_comments <- createComment(comment = comment_vector)
writeComment(wb, 1, col = 1:4, row = 1, comment = header_comments)

writeData(wb, sheet = 1, startRow = 1, x)

saveWorkbook(wb, "muliple_comments.xlsx", overwrite = TRUE)

Это работает, но должен быть лучший способ...


header1_comment <- createComment(comment = comment_vector[1])
writeComment(wb, 1, col = 1, row = 1, comment = header1_comment)

header2_comment <- createComment(comment = comment_vector[2])
writeComment(wb, 1, col = 2, row = 1, comment = header2_comment)

header3_comment <- createComment(comment = comment_vector[3])
writeComment(wb, 1, col = 3, row = 1, comment = header3_comment)

header4_comment <- createComment(comment = comment_vector[4])
writeComment(wb, 1, col = 4, row = 1, comment = header4_comment)

writeData(wb, sheet = 1, startRow = 1, x)

saveWorkbook(wb, "05_muliple_comments.xlsx", overwrite = TRUE)

Для создания: введите здесь описание изображения


person Peter    schedule 06.04.2020    source источник


Ответы (1)


Я не думаю, что createComment позволяет комментировать несколько ячеек, компонент вектора символов предназначен для применения нескольких стилей, как в примере в ?createComment.

Вероятно, самый простой способ обойти это — использовать цикл lapply или for.

lapply(1:4, FUN = function(x) writeComment(wb, 1, col = x, row = 1, comment = createComment(comment = comment_vector[x])))

Итак, в вашем примере при условии, что это будет что-то вроде:

library(openxlsx)

x <- as.data.frame(matrix(1:12, nrow = 3))
names(x) <- letters[1:4]
comment_vector <- paste("Comment", 1:4)

wb <- createWorkbook()
addWorksheet(wb, 1)

# Add multiple comments
lapply(1:4, FUN = function(x) writeComment(wb, 1, col = x, row = 1, comment = createComment(comment = comment_vector[x])))

writeData(wb, sheet = 1, startRow = 1, x)
saveWorkbook(wb, "muliple_comments.xlsx", overwrite = TRUE)
person MKa    schedule 22.04.2020