下载包含多个工作表的 xls 文件作为数据框 Shiny R
Download xls file with multiple sheets as data frames Shiny R
我正在使用 R 包 Shiny 来开发我自己的 Web 应用程序。
我有一个下载按钮,可以将数据导出到 excel 文件中。在 excel 文件中,有 4 个 sheet,每个文件中都有一个数据框。
例如,在sheet1中有dataTab1,在sheet2中有dataTab2,在sheet3中有dataTab3,在sheet4中有数据表4。
为此,我在 shiny server.R.
中使用函数 downloadHeader()
我用过两种方法来做到这一点。
方法一:使用R包xlsx
output$downloadTab <- downloadHandler(
filename = "dataxls.xlsx",
content = function(file) {
#creation of the workbook
dataxls=createWorkbook(file)
#creation of the sheets
dataTabs1=createSheet(wb=dataxls,sheetName="Compartiments-simulation_sans_changement")
dataTabs2=createSheet(wb=dataxls,sheetName="Esperance-simulation_sans_changement")
dataTabs3=createSheet(wb=dataxls,sheetName="Compartiments-simulation_avec_changement")
dataTabs4=createSheet(wb=dataxls,sheetName="Esperance-simulation_avec_changement")
#add the dataframes to the sheets
writeWorksheet(dataxls, dataTab1, sheet = "Compartiments-simulation_sans_changement")
writeWorksheet(dataxls, dataTab2, sheet = "Esperance-simulation_sans_changement")
writeWorksheet(dataxls, dataTab3, sheet = "Compartiments-simulation_avec_changement")
writeWorksheet(dataxls, dataTab4, sheet = "Esperance-simulation_avec_changement")
saveWorkbook(dataxls,file)
}
)
问题是我有以下错误:
createWorkbook(file) 错误:
未知格式 C:\Users\Baramova\AppData\Local\Temp\Rtmpmyqyeh\fileafc6d2b5998.xlsx
我已尝试使用以下示例修复它:
content = function(file) {
fname = paste(file,"xlsx",sep=".")
wb = loadWorkbook(fname, create = TRUE)
createSheet(wb, name = "Sheet1")
writeWorksheet(wb, c(1:3), sheet = "Sheet1")
saveWorkbook(wb)
file.rename(fname,file)
}
但这对我不起作用。也许我遗漏了什么。
你有什么主意吗?
方法二:使用RODBC包
output$downloadTab <- downloadHandler(
filename ="Tab.xls",
content = function(fname) {
tmpdir <- tempdir()
db <- paste(tmpdir,fname,sep="/")
channel <- odbcConnectExcel(xls.file = db,readOnly=FALSE)
sqlSave(channel, Compartiments_simulation_sans_changement, tablename = "Compartiments_simulation_sans_changement")
sqlSave(channel, Esperance_simulation_sans_changement, tablename = "Esperance_simulation_sans_changement")
sqlSave(channel, Compartiments_simulation_avec_changement, tablename = "Compartiments_simulation_avec_changement")
sqlSave(channel, Esperance_simulation_avec_changement, tablename = "Esperance_simulation_avec_changement")
odbcClose(channel)
},
contentType="application/csv"
)
问题是 odbcConnectExcel() 函数无法识别,即使我通过键入以下内容调用了 RODBC 包:
图书馆(RODBC)
你知道为什么会这样吗?
我找到了问题的解决方案。
首先你必须调用 XLConnect 和 RODBC 包。
之后,您可以使用以下示例:
output$downloadTab <- downloadHandler(
filename ="Tab.xls",
content = function(file) {
write.csv(Compartiments_simulation_sans_changement, file="Compartiments-simulation_sans_changement.csv")
write.csv(Esperance_simulation_sans_changement, file="Esperance-simulation_sans_changement.csv")
write.csv(Compartiments_simulation_avec_changement, file="Compartiments-simulation_avec_changement.csv")
write.csv(Esperance_simulation_avec_changement, file="Esperance-simulation_avec_changement.csv")
channel <- odbcConnectExcel(xls.file = file,readOnly=FALSE)
sqlSave(channel, Compartiments_simulation_sans_changement, tablename = "Compartiments_simulation_sans_changement")
sqlSave(channel, Esperance_simulation_sans_changement, tablename = "Esperance_simulation_sans_changement")
sqlSave(channel, Compartiments_simulation_avec_changement, tablename = "Compartiments_simulation_avec_changement")
sqlSave(channel, Esperance_simulation_avec_changement, tablename = "Esperance_simulation_avec_changement")
odbcClose(channel)
},
contentType="application/xls"
)
我正在使用 R 包 Shiny 来开发我自己的 Web 应用程序。
我有一个下载按钮,可以将数据导出到 excel 文件中。在 excel 文件中,有 4 个 sheet,每个文件中都有一个数据框。
例如,在sheet1中有dataTab1,在sheet2中有dataTab2,在sheet3中有dataTab3,在sheet4中有数据表4。
为此,我在 shiny server.R.
中使用函数 downloadHeader()我用过两种方法来做到这一点。
方法一:使用R包xlsx
output$downloadTab <- downloadHandler(
filename = "dataxls.xlsx",
content = function(file) {
#creation of the workbook
dataxls=createWorkbook(file)
#creation of the sheets
dataTabs1=createSheet(wb=dataxls,sheetName="Compartiments-simulation_sans_changement")
dataTabs2=createSheet(wb=dataxls,sheetName="Esperance-simulation_sans_changement")
dataTabs3=createSheet(wb=dataxls,sheetName="Compartiments-simulation_avec_changement")
dataTabs4=createSheet(wb=dataxls,sheetName="Esperance-simulation_avec_changement")
#add the dataframes to the sheets
writeWorksheet(dataxls, dataTab1, sheet = "Compartiments-simulation_sans_changement")
writeWorksheet(dataxls, dataTab2, sheet = "Esperance-simulation_sans_changement")
writeWorksheet(dataxls, dataTab3, sheet = "Compartiments-simulation_avec_changement")
writeWorksheet(dataxls, dataTab4, sheet = "Esperance-simulation_avec_changement")
saveWorkbook(dataxls,file)
}
)
问题是我有以下错误: createWorkbook(file) 错误: 未知格式 C:\Users\Baramova\AppData\Local\Temp\Rtmpmyqyeh\fileafc6d2b5998.xlsx
我已尝试使用以下示例修复它:
content = function(file) {
fname = paste(file,"xlsx",sep=".")
wb = loadWorkbook(fname, create = TRUE)
createSheet(wb, name = "Sheet1")
writeWorksheet(wb, c(1:3), sheet = "Sheet1")
saveWorkbook(wb)
file.rename(fname,file)
}
但这对我不起作用。也许我遗漏了什么。 你有什么主意吗?
方法二:使用RODBC包
output$downloadTab <- downloadHandler(
filename ="Tab.xls",
content = function(fname) {
tmpdir <- tempdir()
db <- paste(tmpdir,fname,sep="/")
channel <- odbcConnectExcel(xls.file = db,readOnly=FALSE)
sqlSave(channel, Compartiments_simulation_sans_changement, tablename = "Compartiments_simulation_sans_changement")
sqlSave(channel, Esperance_simulation_sans_changement, tablename = "Esperance_simulation_sans_changement")
sqlSave(channel, Compartiments_simulation_avec_changement, tablename = "Compartiments_simulation_avec_changement")
sqlSave(channel, Esperance_simulation_avec_changement, tablename = "Esperance_simulation_avec_changement")
odbcClose(channel)
},
contentType="application/csv"
)
问题是 odbcConnectExcel() 函数无法识别,即使我通过键入以下内容调用了 RODBC 包: 图书馆(RODBC)
你知道为什么会这样吗?
我找到了问题的解决方案。
首先你必须调用 XLConnect 和 RODBC 包。 之后,您可以使用以下示例:
output$downloadTab <- downloadHandler(
filename ="Tab.xls",
content = function(file) {
write.csv(Compartiments_simulation_sans_changement, file="Compartiments-simulation_sans_changement.csv")
write.csv(Esperance_simulation_sans_changement, file="Esperance-simulation_sans_changement.csv")
write.csv(Compartiments_simulation_avec_changement, file="Compartiments-simulation_avec_changement.csv")
write.csv(Esperance_simulation_avec_changement, file="Esperance-simulation_avec_changement.csv")
channel <- odbcConnectExcel(xls.file = file,readOnly=FALSE)
sqlSave(channel, Compartiments_simulation_sans_changement, tablename = "Compartiments_simulation_sans_changement")
sqlSave(channel, Esperance_simulation_sans_changement, tablename = "Esperance_simulation_sans_changement")
sqlSave(channel, Compartiments_simulation_avec_changement, tablename = "Compartiments_simulation_avec_changement")
sqlSave(channel, Esperance_simulation_avec_changement, tablename = "Esperance_simulation_avec_changement")
odbcClose(channel)
},
contentType="application/xls"
)