Ошибка функции insertImage (пакет R openxlsx)

У меня проблемы с функцией insertImage в R пакете openxlsx. Каждый раз, когда я вставляю новое изображение, все остальные изображения в документе сворачиваются и не отображаются. Любые идеи?


person Martín Rosas Araya    schedule 02.12.2019    source источник
comment
Не могли бы вы привести пример кода того, что вы пробовали?   -  person John Carty    schedule 02.12.2019
comment
Я пробовал с insertImage("01", img1, width = 13, height = 8.5, startRow = 11, startCol = 2, units = "cm", dpi = 96). Все это часть 96-строчного кода, написанного для итерации шаблона Excel по нескольким сотням строк информации.   -  person Martín Rosas Araya    schedule 02.12.2019


Ответы (2)


Не видя больше вашего кода, я не уверен, что могу чем-то помочь. Я смог использовать ваш фрагмент, чтобы без проблем вставить два изображения (одно под другим). Вот ссылка на insertImage() документацию.

library(openxlsx)

wb <- openxlsx::loadWorkbook("M:\\imageTest.xlsx")
wb %>% 
  insertImage("01", "C:\\Users\\jcarty\\Desktop\\imageTest.jpg", width = 13, height = 8.5
              , startRow = 11, startCol = 2, units = "cm", dpi = 96) 
wb %>% 
  saveWorkbook("M:\\imageTest.xlsx", overwrite = TRUE)


wb <- openxlsx::loadWorkbook("M:\\imageTest.xlsx")
wb %>% 
  insertImage("01", "C:\\Users\\jcarty\\Desktop\\imageTest2.jpg", width = 13, height = 8.5
              , startRow = 27, startCol = 2, units = "cm", dpi = 96) 
wb %>% 
  saveWorkbook("M:\\imageTest.xlsx", overwrite = TRUE)

person John Carty    schedule 02.12.2019

У меня такая же проблема, когда я пытаюсь вставить более двух изображений на один лист. По-видимому, это известная проблема в пакете: https://github.com/awalker89/openxlsx/issues/373.

Это не лучшее решение, но единственное, что вы можете сделать, - это вставить изображения в отдельные листы, а затем при желании вручную объединить листы.

Если вы определите номер фигуры, вы можете сделать что-то вроде этого:

fignum <- 1

# Set current sheet name
# For uneven figure numbers
if ((fignum %% 2) != 0) {
  
  # Set plot name to current number
  current_sheetname <- paste0("plot_", fignum)
  
# For even figure numbers
} else {
  
  # Set plot name to previous number
  current_sheetname <- paste0("plot_", fignum - 1)
}

# Check if the current worksheet name doesn't exist yet
if (!(current_sheetname %in% names(wb))) {
  # Create new worksheet
  openxlsx::addWorksheet(wb = wb,
                         sheetName = current_sheetname)
}

# Write figure to new worksheet
openxlsx::insertImage(wb = wb,
                      sheet = current_sheetname,
                      file = img1)
person Eefje Poppelaars    schedule 23.11.2020