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

如何在rhandsontable表格仅最后一行添加下拉菜单(其余行存数值)

问题解决:rhandsontable仅指定行添加下拉菜单并支持动态列

需求说明

需要在rhandsontable渲染的表格中实现:

  • 仅最后一行(Row_C_dropdown)显示下拉菜单,选项为NA、Item A、Item B
  • 其余两行(Row_A_numeric、Row_B_numeric)保留数值输入功能
  • 支持通过「Add series」按钮动态添加列,新增列的最后一行同样渲染下拉菜单

修改后的完整代码

library(rhandsontable)
library(shiny)

ui <- 
  fluidPage(
    rHandsontableOutput('hottable_1'),
    actionButton("addSeries","Add series")
  ) 

server <- function(input,output,session)({
  seriesTbl_1 <- reactiveVal(
    data.frame(
      'Series 1' = c(1,24,NA),
      row.names = c("Row_A_numeric","Row_B_numeric","Row_C_dropdown")
    )
  ) 
  
  observeEvent(input$hottable_1, {seriesTbl_1(hot_to_r(input$hottable_1))})
  
  output$hottable_1 <- renderRHandsontable({
    tbl <- seriesTbl_1()
    select_option <- c(NA_character_, "Item A", "Item B") 
    rhandsontable(
      tbl,
      rowHeaderWidth = 200, 
      useTypes = TRUE,
      selectCallback = TRUE,
      overflow = "visible"
    ) %>%
      hot_table(id = "hottable_1") %>%
      # 先将所有列默认设置为数值类型,保证前两行是数值输入
      hot_col(
        col = names(tbl),
        allowInvalid = FALSE,
        type = "numeric"
      ) %>%
      # 循环遍历每一列,单独给最后一行设置下拉菜单
      {
        tbl_render <- .
        for(col_name in names(tbl)){
          tbl_render <- tbl_render %>%
            hot_cell(
              row = 3, # 对应行名Row_C_dropdown的行索引(行从1开始计数)
              col = col_name,
              type = "dropdown",
              source = select_option
            )
        }
        tbl_render
      }
  })
  
  observeEvent(input$addSeries, {
    newSeriesCol_1 <- data.frame(c(1,24,NA)) 
    names(newSeriesCol_1) <- paste("Series", ncol(hot_to_r(input$hottable_1)) + 1)
    seriesTbl_1(cbind(seriesTbl_1(), newSeriesCol_1))
  })
 
  seriesTbl_1_DF <- reactive({seriesTbl_1()})
})

shinyApp(ui, server)

关键修改说明

  1. 全局列类型设置:先通过hot_col将所有列统一设置为numeric类型,确保前两行的数值输入功能正常。
  2. 指定行单独配置:使用循环遍历表格的每一列,通过hot_cell函数精准定位到最后一行(第3行,行索引从1开始),将该单元格设置为dropdown类型并指定下拉选项。
  3. 动态列兼容:新增列的结构与初始列完全一致,渲染逻辑会自动覆盖新添加的列,保证新增列的最后一行同样显示下拉菜单。

内容的提问来源于stack exchange,提问作者Village.Idyot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 15:22:04