You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Shiny实时读取Google Sheet数据?解决定时刷新卡顿问题

解决Shiny应用自动刷新Google Sheet数据的问题

问题根源分析

  1. 定时刷新失效:现有checkFunc返回的是gs4_find()的第一个sheet对象,该对象的标识不会随数据内容变更而改变,导致reactivePoll无法检测到数据更新,自然不会触发重新读取。
  2. 应用卡顿:每分钟全量读取并处理数据,且每次都会重新渲染整个DataTable,频繁的IO和计算操作引发卡顿。

修正方案

1. 优化reactivePoll的检测逻辑

将checkFunc改为获取目标Google Sheet的最后修改时间,这是最精准的变更检测依据,且操作轻量,不会造成额外负担。同时提前获取目标Sheet对象,避免重复查找的开销。

修改后的reactivePoll代码:

# 提前获取目标Sheet对象(放在server函数开头)
ss <- gs4_get("你的Google Sheet ID或名称")

df <- reactivePoll(
  intervalMillis = 30000, # 可按需调整检测间隔,比如30秒
  session = session,
  checkFunc = function() {
    # 获取Sheet最后修改时间作为变更标识
    sheet_metadata <- gs4_get(ss)
    sheet_metadata$updated
  },
  valueFunc = function() {
    # 读取数据并高效处理
    df <- range_speedread(ss, sheet = sheet_name, range = "A1:T", guess_max = 10000)
    # 批量转换数值列,简化重复代码
    num_cols <- c("KPI", "Budget", "Page likes")
    df[num_cols] <- lapply(df[num_cols], as.numeric)
    # 过滤数据
    df <- dplyr::filter(df, Budget > 0)
    return(df)
  }
)

2. 优化DataTable渲染性能

开启服务器端处理减少前端渲染压力,避免不必要的重复操作:

output$your_table_id <- DT::renderDT({
  df_data <- df()
  datatable(df_data %>% select(-c(Engagement, Lead, `Page Like`, Views)), 
            extensions = 'Buttons', 
            options = list(
              dom = 'Bfrtip',
              buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
              server = TRUE # 服务器端处理,大数据量更流畅
            )) %>%
    formatPercentage("Burn Rate", 1) %>% 
    formatCurrency(c("Budget", "Roll Out Budget", "Cost"), 
                   currency = "Rp. ", digits = 2L, mark = ",") %>%
    formatStyle(
      "Burn Rate",
      backgroundColor = styleInterval(c(0.95, 1.00), c("#ffc04d", "#66b366", "#fb6666")),
      backgroundSize = "80% 90%",
      backgroundRepeat = "no-repeat",
      color = "black",
      backgroundPosition = "center"
    )
})

额外优化建议

  • 若Sheet数据量较大,可缩小读取范围(仅读取有数据的行),减少range_speedread的加载时间。
  • 确保Shiny应用已正确配置Google OAuth授权,利用googlesheets4的缓存机制避免重复授权开销。

内容的提问来源于stack exchange,提问作者Winona Salsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:18:24