Я пытаюсь добавить несколько проверок и добавить формулы в файл Excel. Вот код, который я использую:

library(openxlsx)
fileTemplate <- 'New01.xlsx'
wbTemplate <- loadWorkbook(fileTemplate)
addWorksheet(wbTemplate, "Sheet1")
writeData(wbTemplate, "Sheet1", dataset)
len <- NROW(dataset)
dataValidation(wbTemplate, 2, col = 2, rows = 2:len, type = "list", value = "'Data Validation'!$A$2:$A$19")
dataValidation(wbTemplate, 2, col = 3, rows = 2:len, type = "list", value = "'Data Validation'!$B$2:$B$501")
dataValidation(wbTemplate, 2, col = 5, rows = 2:len, type = "list", value = "'Data Validation'!$C$2:$C$6")
openXL(wbTemplate)

Если я просто использую один dataValidation, он открывается нормально, если более одного, он жалуется на то, что файл поврежден ...

r
5
user1298416 17 Фев 2018 в 20:35
Существует версия для разработки openxlsx, которая решает эту проблему. См. Ниже, как вы импортируете его в r.
 – 
Cristian E. Nuno
21 Фев 2018 в 18:55

1 ответ

Лучший ответ

К сожалению, это похоже на ошибку, обнаруженную в списке типа проверки данных, когда существует более одного на листе № 266.

К счастью, есть запрос на извлечение, который пытается исправить эту проблему. Используя devtools::dev_mode(), вы можете установить версия tkunstek/openxlsx без удаления и переустановки версии openxlsx.

# install the devtools package
install.packages( pkgs = "devtools" )

# load necessary packages
library( devtools )

# create a new library for storing installed packages.
dev_mode(on = TRUE )

# download the PR request that fixes
# the dataValidation error
install_github( repo = "tkunstek/openxlsx" )

# load the library
library( openxlsx )

# create workbook
wb <- createWorkbook()

# initialize worksheet
addWorksheet( wb = wb, sheetName = "Sheet1" )

# add iris to Sheet1
writeData( wb = wb
           , sheet = "Sheet1"
           , x = iris
)

# add Excel data validation to cells
dataValidation( wb = wb
                , sheet = "Sheet1"
                , cols = 1:4
                , rows = 2:( 1 + nrow( iris ) )
                , type = "decimal"
                , operator = "between"
                , value = c( 0, 10 )
)
dataValidation( wb = wb
                , sheet = "Sheet1"
                , cols = 5
                , rows = 2:( 1 + nrow( iris ) )
                , type = "textLength"
                , operator = "lessThanOrEqual"
                , value = 10
                )

# view the data in Excel
# notice that the file is no longer corrupt
openXL( file = wb )

# turn off dev_mode
dev_mode( on = FALSE )  # return to CRAN version of openxlsx

# end of script

Ответ исходит от Как установить версию для разработки пакетов R github репозиторий.

2
Cristian E. Nuno 20 Фев 2018 в 06:17
Спасибо за решение. Пробую сейчас, жалуется: d> install_github (repo = "tkunstek / openxlsx") Скачивание репозитория GitHub tkunstek / openxlsx @ master с URL api.github.com/repos/tkunstek/openxlsx/zipball/master Ошибка установки: не удалось найти инструменты сборки, необходимые для сборки openxlsx d> ... Предлагаемое решение, похоже, заключается в установке Rtools, но оно не применимо ко мне, поскольку я нахожусь на Mac ...
 – 
user1298416
22 Фев 2018 в 06:58
Хорошо, после установки fortran и xcode-select --install я смог install_github (repo = "tkunstek / openxlsx"). Но теперь у меня такая ошибка: d> dataValidation (wbTemplate, 2, col = 2, rows = 2: len, type = "list", value = "'Data Validation'! $ A $ 2: $ A $ 19") Ошибка в .Call ("openxlsx_convert_to_excel_ref", PACKAGE = "openxlsx",: "openxlsx_convert_to_excel_ref" недоступен для .Call () для пакета "openxlsx"
 – 
user1298416
22 Фев 2018 в 09:08
Я вижу, что в вашем аргументе value вы явно вводите «'Проверка данных' $ A $ 2: $ A $ 19». Согласно файлу справки, type = "list" требует явная ссылка на имя листа, указанное в аргументе sheet внутри аргумента value. Попробуйте вместо этого: value = "'Sheet1'$A$2:$A$19".
 – 
Cristian E. Nuno
22 Фев 2018 в 17:14
1
Что в итоге сработало - сначала я запустил обычный openxlsx, чтобы внести изменения в мой файл, вывести и сохранить файл, затем использовал предложенный aspiringurbandatascientist код (открыл файл, выполнил проверки, сохранил файл).
 – 
user1298416
23 Фев 2018 в 05:51
1
Использовал install_github("ycphs/openxlsx"), и у меня это действительно сработало! Ссылки на ячейки - это странно, у меня они работают в следующих двух форматах: sheet!$A$1:$A$2 и 'sheet'!$A$1:$A$2
 – 
MokeEire
27 Фев 2020 в 03:19