Вопрос или проблема
Я пытаюсь следовать этому руководству, и когда я пытаюсь его запустить и нажимаю кнопку загрузки, он выдает мне html-файл, и я не знаю почему. Это касается не только этого скрипта, но и моего личного проекта.
Вот код:
library(shiny)
library(openxlsx)
# создаем некоторые примерные данные для загрузки
my_table <- data.frame(
Name = letters[1:4],
Age = seq(20, 26, 2),
Occupation = LETTERS[15:18],
Income = c(50000, 20000, 30000, 45000)
)
# добавляем строку с итогами
my_table <- rbind(
my_table,
data.frame(
Name = "Total",
Age = NA_integer_,
Occupation = "",
Income = sum(my_table$Income)
)
)
# минимальный интерфейс Shiny
ui <- fluidRow(
column(
width = 12,
align = "center",
tableOutput("table_out"),
br(),
downloadButton(
"download_excel",
"Скачать данные в Excel"
)
)
)
# минимальный сервер Shiny
server <- function(input, output) {
output$table_out <- renderTable({
my_table
})
output$download_excel <- downloadHandler(
filename = function() {
"employee_data.xlsx"
},
content = function(file) {
my_workbook <- createWorkbook()
addWorksheet(
wb = my_workbook,
sheetName = "Данные сотрудников"
)
setColWidths(
my_workbook,
1,
cols = 1:4,
widths = c(6, 6, 10, 10)
)
writeData(
my_workbook,
sheet = 1,
c(
"Название компании",
"Данные сотрудников"
),
startRow = 1,
startCol = 1
)
addStyle(
my_workbook,
sheet = 1,
style = createStyle(
fontSize = 24,
textDecoration = "bold"
),
rows = 1:2,
cols = 1
)
writeData(
my_workbook,
sheet = 1,
my_table,
startRow = 5,
startCol = 1
)
addStyle(
my_workbook,
sheet = 1,
style = createStyle(
fgFill = "#1a5bc4",
halign = "center",
fontColour = "#ffffff"
),
rows = 5,
cols = 1:4,
gridExpand = TRUE
)
addStyle(
my_workbook,
sheet = 1,
style = createStyle(
fgFill = "#7dafff",
numFmt = "comma"
),
rows = 6:10,
cols = 1:4,
gridExpand = TRUE
)
saveWorkbook(my_workbook, file)
}
)
}
shinyApp(ui, server)
Ошибка, которая появляется в консоли, выглядит так:
Предупреждение: Ошибка в : wb должен быть Workbook
1: runApp
Но я уже проверил, и в коде my_workbook <- createWorkbook(), так что я не знаю, что может быть не так.
Ответ или решение
Генерация отчета в Excel через shinyapps: решение проблемы
Введение
Ваша проблема с генерацией отчета в Excel через приложение Shiny достаточно распространена среди разработчиков. Если вы получаете HTML-файл вместо ожидаемого Excel-документа, вероятная причина может скрываться в ошибках кода, связанных с неправильно созданным объектом рабочего файла. Давайте разберем ваш код и найдем решение этой проблемы.
Анализ кода
Ваш код включает основные функции для генерации отчета в Excel. Однако вы столкнулись с ошибкой:
Warning: Error in: wb must be a Workbook
Это указывает на то, что функция saveWorkbook
не принимает корректный объект рабочего файла. В вашем случае объект my_workbook
, создаваемый через createWorkbook()
, может не быть должным образом доступным в момент его использования.
Возможные решения и улучшения
Давайте посмотрим на ваш код и внесем необходимые изменения.
-
Убедитесь в правильности загружаемых библиотек:
Убедитесь, что вы правильно загружаете все нужные библиотеки:library(shiny) library(openxlsx)
-
Использование функции
createWorkbook
:
Проверьте, что функцияcreateWorkbook()
вызывается корректно и до обращения к объектуmy_workbook
вsaveWorkbook
. Это поможет утвердиться в том, что вы создаете новый объект. -
Изменение функции
downloadHandler
:
Редактируйте функциюdownloadHandler
, чтобы убедиться, что объектmy_workbook
правильно создается перед его сохранением:output$download_excel <- downloadHandler( filename = function() { "employee_data.xlsx" }, content = function(file) { my_workbook <- createWorkbook() # Убедитесь, что создаете Workbook addWorksheet(my_workbook, "Employee Data") # Корректный вызов функции # Остальной код остается без изменений # Пример с saveWorkbook saveWorkbook(my_workbook, file) # Сохранение в файл } )
Основные рекомендации
- Отладка кода: Используйте функции
print()
илиstr()
для отладки, чтобы следить за объектами в процессе исполнения. - Проверка зависимостей: Если вы используете shinyapps, убедитесь, что все необходимые пакеты установлены и загружены на платформе.
- Документация и примеры: Обратитесь к официальной документации R и shiny, чтобы убедиться, что ваш код использует самые последние версии функций и библиотек.
Заключение
Соблюдение предложенных рекомендаций и структура вашего кода позволят успешно устранить описанную вами ошибку. Если после этих изменений проблема останется, попробуйте проверить другие части приложения на наличие аналогичных ошибок. Удачи в разработке вашего приложения на Shiny!