我的应用程序允许用户输入日期范围,除法,pdf文件和excel文件。该程序从pdf中提取数字,计算总点数,并将其添加到从现有excel文件中提取的等级中。应该写并保存excel文件。没有Shiny,我的程序可以正常工作。在Shiny中,它正在运行并且数据正确,但是不会将数据添加到excel文件中。我已在各个阶段添加了打印提示以进行测试。我尝试过在外部运行此程序,但结果相同。它不会引发错误,只是不会将数据添加到excel文件中。
服务器功能
server<-function(input,output){
output$horse_div <- renderText({
paste("You have chosen",input$division)
})
output$qualifying<-renderText({
paste("Qualifying Period from",input$date[1],"to",input$date[2])
})
output$pdf<-renderText({
req(input$horsereport)
req(input$excelfile)
ponyoutput<-horseRecord(input$horsereport$datapath,input$date[1],input$date[2],input$division,input$excelfile$datapath)
paste("mylist",ponyoutput[1])
})
}
horseRecord函数的片段
#Set up sheet and excel file
wsheetrank<-paste(div,"RANK")
wsheetpoints<-paste(div,"POINTS")
#load workbook
wb<-loadWorkbook(file=excelfile)
#add pony to ranked list
rank<-read.xlsx(excelfile,wsheetrank)
rank<-rank[,2:3]
rank<-rank %>% mutate(Points=as.numeric(Points))
dat<-rank
dat<-dat%>% add_row(Pony=horse,Points=points) %>% arrange(desc(Points))
#remove duplicates
dat<-dat[!duplicated(dat$Pony),]
rownames(dat)<-seq(from=1,to=nrow(dat),by=1)
#find rank
rank<-grep(horse,dat$Pony)
#Write to excel file
writeData(wb,sheet=wsheetrank,x=dat,colNames=TRUE,rowNames = TRUE,borders="all")
saveWorkbook(wb,excelfile,overwrite=TRUE)
这应将从PDF文件中提取的总点添加到排名列表中,重新排序,然后写入排名工作表。完整的代码和文件可以在这里找到:https://github.com/chealy21/horsePoints
答案 0 :(得分:0)
您上传的excel文件将保存在闪亮服务器上的临时文件中。即使您在本地运行应用,磁盘上也不是excel文件。
如果在将数据写入工作簿之前添加browser()
(horsereportfunction.R
的第138行),则当应用程序到达该行时,您将收到控制台提示,并且可以看到它为你自己。
这是excelfile
变量中的内容(在Linux计算机上。Windows临时文件位于其他位置,但它们仍然只是tmp文件):
excelfile
# [1] "/tmp/RtmpFllCQq/5709c4b043babf5b85bd29b4/0.xlsx"
闪亮服务器上的此临时文件确实已更新:
readxl::read_excel("/tmp/RtmpFllCQq/5709c4b043babf5b85bd29b4/0.xlsx") %>% filter(Pony == "BIT OF LAUGHTER")
# # A tibble: 1 x 3
# ..1 Pony Points
# <chr> <chr> <dbl>
# 1 30 BIT OF LAUGHTER 1503.
这与documentation for fileInput
相符:
只要文件上传完成,就会将相应的输入变量设置为数据框。此数据框包含每个选定文件的一行,以及以下各列:
- 名称: Web浏览器提供的文件名。这不是读取以获取上载的实际数据的路径(请参见datapath列)。
- 大小: 上传数据的大小(以字节为单位)。
- 类型: 浏览器报告的MIME类型(例如,文本/纯文本),如果浏览器不知道,则为空字符串。
- 数据路径: 包含已上传数据的临时文件的路径。如果用户执行其他上载操作,则该文件可能会被删除。
也许您可以让用户在更新后从datapath
下载更新的报告?
如果您从不打算发布应用程序并且始终在本地使用它,则可以对excel文件目录进行硬编码。然后,您的应用将从datapath
的硬编码位置复制工作簿。