gpt4 book ai didi

r - 使用 Shiny 写入和保存到 excel 文件

转载 作者:行者123 更新时间:2023-12-04 20:52:20 33 4
gpt4 key购买 nike

我的应用程序允许用户输入日期范围、部门、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

最佳答案

您上传的 excel 文件将保存在 Shiny 服务器上的临时文件中。即使您在本地运行应用程序,它也不是磁盘上的 excel 文件。

如果添加 browser()在将数据写入工作簿之前(horsereportfunction.R 的第 138 行),当应用程序到达该行时,您将收到控制台提示,您将能够自己看到它。

这就是 excelfile 中的内容变量(在 linux 机器上。Windows 临时文件在其他地方,但它们仍然只是 tmp 文件):

excelfile
# [1] "/tmp/RtmpFllCQq/5709c4b043babf5b85bd29b4/0.xlsx"

Shiny 服务器上的这个临时文件确实得到了更新:

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 :

Whenever a file upload completes, the corresponding input variable is set to a dataframe. This dataframe contains one row for each selected file, and the following columns:

  • name: The filename provided by the web browser. This is not the path to read to get at the actual data that was uploaded (see datapath column).
  • size: The size of the uploaded data, in bytes.
  • type: The MIME type reported by the browser (for example, text/plain), or empty string if the browser didn't know.
  • datapath: The path to a temp file that contains the data that was uploaded. This file may be deleted if the user performs another upload operation.


也许您可以让用户在更新后下载更新的报告(来自 datapath )?

如果您从不打算发布您的应用程序并且总是在本地使用它,您可以硬编码 excel 文件目录。然后,您的应用程序会将工作簿从 datapath 复制到硬编码位置。 .

关于r - 使用 Shiny 写入和保存到 excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55921342/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com