rhandson Get selected rows of Rhandsontable
selectCallback=TRUE을 사용
library(shiny)
library(rhandsontable)
library(data.table)
init_env4 <- function(){
env <- new.env()
env$select_idx <- NULL
return(env)
}
env4 <- init_env4()
ui = fluidPage(
# rHandsonTable Grid
rHandsontableOutput('rht_table'), br(),
# Display result
verbatimTextOutput('resultDisplay1'),
verbatimTextOutput('resultDisplay2'),
verbatimTextOutput('resultDisplay3')
)
server <- function(input, output, session) {
# Data for grid
baseData <- data.table(AA=c(1:10), BB=TRUE, CC=LETTERS[1:10], DD=c(11:20))
# Define rhandsonTable
output$rht_table <- renderRHandsontable(
rhandsontable(baseData, selectCallback=T) %>%
hot_table(highlightRow=T, highlightCol=F) %>% #stretchH="last"
hot_cols(colWidths=c(80, 80, 100, 60), fixedColumnsLeft=1, columnSorting=T) %>%
hot_col(col="AA", readOnly=T) %>%
hot_col(col="BB", readOnly=F, type="checkbox") %>%
hot_col(col="CC", readOnly=T) %>%
hot_col(col="DD", readOnly=T)
)
# Display Selected Row
output$resultDisplay1 <- renderPrint({
cat('Selected Row : ', input$rht_table_select$select$r,'\n')
cat('Selected Column : ', input$rht_table_select$select$c,'\n')
cat('Selected Cell Val : ', input$rht_table_select$data[[input$rht_table_select$select$r]][[input$rht_table_select$select$c]],'\n')
cat('Selected Range : ','(',input$rht_table_select$select$r, ',',input$rht_table_select$select$c, ')~(',
input$rht_table_select$select$r2,',',input$rht_table_select$select$c2,')', sep="",'\n')
})
# Display Changed Row
output$resultDisplay2 <- renderPrint({
cat('Changed Cell Row Column : ', input$rht_table$changes$changes[[1]][[1]], input$rht_table$changes$changes[[1]][[2]],'\n')
cat('Changed Cell Old Value : ', input$rht_table$changes$changes[[1]][[3]],'\n')
cat('Changed Cell New Value : ', input$rht_table$changes$changes[[1]][[4]])
})
# rht_select_r <- reactive(input$rht_table_select$select)
# observe({
# selectedRow <- rht_select_r()
# idx <- selectedRow$r
# if(is.null(idx)) {
# env4$select_idx <<- NULL ; cat("====> NULL")
# } else {
# env4$select_idx <<- idx ; cat("====>",env4$select_idx)
# }
# })
output$resultDisplay3 <- renderPrint({
env4$select_idx <<- input$rht_table_select$select$r
cat('Selected Row : ', env4$select_idx,'\n')
})
}
shinyApp(ui, server)
https://stackoverflow.com/questions/30733573/get-selected-rows-of-rhandsontable
https://code.i-harness.com/en/q/1d4f505
selectCallback=TRUE을 사용하면
selected row/ column/range/ cell values 과 edited cells 을 구할수 있다.
( cell을 더블클릭하여 수정한 후, enter를 치면 수정을 완료된다.)
library(shiny)
library(rhandsontable)
ui=fluidPage(
rHandsontableOutput('rht_slm_table'),
verbatimTextOutput('resultDisplay')
)
server=function(input,output,session)({
df=data.frame(N=c(1:10),L=LETTERS[1:10],M=LETTERS[11:20])
output$rht_slm_table=renderRHandsontable(
rhandsontable(df,selectCallback = TRUE,readOnly = FALSE)
)
output$resultDisplay=renderPrint({
cat('Selected Row :', input$rht_slm_table_select$select$r,'\n')
cat('Selected Column :', input$rht_slm_table_select$select$c,'\n')
cat('Selected Cell Val:', input$rht_slm_table_select$data[[input$rht_slm_table_select$select$r]][[input$rht_slm_table_select$select$c]],'\n')
cat('Selected Range :','R',input$rht_slm_table_select$select$r, ' C',input$rht_slm_table_select$select$c, ':',
'R',input$rht_slm_table_select$select$r2,' C',input$rht_slm_table_select$select$c2,sep="",'\n')
cat('\n')
cat('Changed Cell Row Column:',input$rht_slm_table$changes$changes[[1]][[1]], input$rht_slm_table$changes$changes[[1]][[2]],'\n')
cat('Changed Cell Old Value :',input$rht_slm_table$changes$changes[[1]][[3]],'\n')
cat('Changed Cell New Value :',input$rht_slm_table$changes$changes[[1]][[4]])
})
}) # end server
shinyApp(ui = ui, server = server)