0

我正在编写一个闪亮的应用程序来维护一个 googlesheets 电子表格,并且遇到了一些我在档案中没有找到答案的问题。

问题 1 是在我使用 sheet_append 函数时将前导撇号添加到某些字段(非文本字段),这导致 GS 将字段识别为文本而不是数字/日期。

此屏幕截图显示了 googlesheets 中整数和日期字段的问题...

整数字段

日期字段

电子表格中的相关列已设置为“数字”和“日期”数据类型,但显然 API 只是将所有数据从闪亮发送到 GS 作为文本;有没有办法保留或强制 GS 接收的数据类型?

要保存的数据字符串是这样编译的...

       observeEvent(input$save, {
       
        if (session$input$request == "New") {
              NewRow <- c(" ", as.integer(format(Sys.time(), '%Y')), " ", input$requestor, input$frequency, if (input$frequency == "Adhoc") {" "} else {input$interval},
                               format(as.Date(input$requestdate), "%d/%m/%Y"), format(as.Date(input$completedate), "%d/%m/%Y"),
                               input$extract, as.integer(input$lines), input$analysis, input$deident,input$outputtype, 
                               if (input$outputtype == "Raw Data") {" "} else {input$report}, input$distribution, input$notes)
              saveData(NewRow)
              PopUp("Record Saved")
              sheetData <- loadData()}
      
           else {UpdateRow <- c(" ", substr(input$Request, 1,4), " ", input$Request, input$year, input$requestor, input$frequency, 
                                if (input$frequency == "Adhoc") {" "} else {input$interval},
                                format(as.Date(input$requestdate), "%d/%m/%Y"), format(as.Date(input$completedate), "%d/%m/%Y"),
                                input$extract, as.integer(input$lines), input$analysis, input$deident, input$outputtype, 
                                if (input$outputtype == "Raw Data") {" "} else {input$report}, input$distribution, input$notes)
               updateData(UpdateRow, input$Number + 1)
               PopUp("Record Updated")
               sheetData <- loadData()}
})

然后我对 GS4 sheet_append 函数做了一个简单的调用......

   saveData <- function(data) {
   # The data must be a data frame rather than a named vector
   data <- data %>% as.list() %>% data.frame()
   # Add the data as a new row
   sheet_append(ss, data)
 }

问题 2 更具有一般性。数据集包含一个 yearmon 数据列(zoo 包),用于过滤数据,并将其显示在 kableExtra 表中(效果很好,看起来很棒).. 但我想禁止显示 yearmon 列表(以保留一些屏幕空间)。有没有办法让列保留在数据集中(用于过滤)但不显示在表中?

下面的屏幕截图... 在此处输入图像描述

对 kableExtra 的调用是...

observe({
    if (input$selection == "Monthly") {
      
      output$kableTable <- function (){
                           kable((dplyr::filter(sheetData[-c(1:2,11,13:14)], MthYr == input$mthyr)), align = c('l')) %>% 
                           kable_styling(bootstrap_options = c("striped","hover"), full_width = TRUE, position = "center") %>% 
                           column_spec(1, width = "3.5cm") %>% column_spec(2, width = "11cm") %>%  column_spec(3, width = "3cm") %>% 
                           column_spec(4, width = "3cm") %>% column_spec(5, width = "4cm") %>% column_spec(6, width = "4cm") %>%
                           column_spec(7, width = "3cm") %>%column_spec(11, width = "10cm") %>% column_spec(12, width = "9cm")
      
      }}

我试图在过滤后使用这样的管道 [] 对数据进行子集化......

observe({
    if (input$selection == "Monthly") {
      
      output$kableTable <- function (){
                           kable(((dplyr::filter(sheetData[-c(1:2,11,13:14)], MthYr == input$mthyr)) %>% .[-c[12]]), align = c('l')) %>% 
                         

但这只会产生一个错误......

子集错误

任何人都有关于如何将此字段保留在数据集中但不显示在表格中的想法?

彼得

4

0 回答 0