Я сделал shinyapp , который может загружать файлы xlsx и csv по одному. Есть ли способ создать функцию downloadHandler
для загрузки всех файлов .xlsx
и .csv
в zip-файл? Пожалуйста, помогите!
Ниже приведен пример кода:
Вот код пользовательского интерфейса, который я создал для кнопок загрузки файлов:
library(shiny)
library(openxlsx)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
downloadButton("download_excel_1", "Download Excel 1"),
downloadButton("download_excel_2", "Download Excel 2"),
downloadButton("download_csv_1", "Download csv 1")
),
mainPanel()
)
)
Ниже приведен код для сервер:
server <- function(input, output) {
excel_name_1 = reactive({
(paste("Excel 1", ".xlsx"))})
output$download_excel_1 <- downloadHandler(
filename = function() {excel_name_1()},
content = function(file) {my_workbook <- createWorkbook()
addWorksheet(wb = my_workbook, sheetName = paste("excel file 1"))
writeData(my_workbook, sheet = 1, paste("text"), startRow = 2,startCol = 2)
pageSetup(my_workbook, sheet = 1, orientation = "landscape")
saveWorkbook(my_workbook, file)})
excel_name_2 = reactive({
(paste("Excel 2", ".xlsx"))})
output$download_excel_2 <- downloadHandler(
filename = function() {excel_name_2()},
content = function(file) {my_workbook <- createWorkbook()
addWorksheet(wb = my_workbook, sheetName = paste("excel file 2"))
writeData(my_workbook, sheet = 1, paste("text"), startRow = 2,startCol = 2)
pageSetup(my_workbook, sheet = 1, orientation = "landscape")
saveWorkbook(my_workbook, file)})
csv_name_1 = reactive({
paste("csv 1", ".csv")})
output$download_csv_1 <- downloadHandler(
filename = function() {csv_name_1()},
content = function(file) {write.csv(data.frame(data.frame(csv_1())), file, row.names=FALSE)}) }
csv_1 = reactive({
sample = c("sample text")
csv = as.data.frame(t(as.matrix(data.frame(sample))))
colnames(csv) = c("sample")
csv
})
shinyApp(ui = ui, server = server)
Цените свое время и усилия с этим.