Я хочу, чтобы иметь возможность скопировать строки текста из Excel и вставить его в текстовое поле в нашем приложении следующим образом:
Выделите все ячейки и скопируйте в текстовое поле «Образцы меток»:
Что мы хотим (каждая строка в Excel - это отдельная запись в текстовом поле)
Что приложение делает в настоящее время, когда мы вставляем строки из Excel (каждая строка из Excel объединяется в одну запись):
Есть ли способ скопировать ячейки в текстовое поле, похожее на SelectizeInput, и каким-то образом отделить каждую ячейку при копировании из Excel? Спасибо.
Редактировать 1
Исключения:
1) Когда строки имеют одинаковые значения:
показывает только одну строку, но для этого нужны 4 "женские" метки (если это возможно)
2) Ячейки имеют значения с пробелом:
каждая метка разделена пробелом, а повторяющиеся слова, такие как DAY, отображаются только один раз:
В идеале это то, что нужно:
Редактировать 2
Когда разделитель установлен на / n, все объединяется в одну метку, а не в отдельные метки
Всего 1 ответ
Вот минимальный пример, который работает для меня.
library(shiny)
ui <- fluidPage(
selectizeInput(
"foo",
label = "inputs",
choices = "",
multiple = T,
options = list(delimiter = " ", create = T)
),
textOutput("results")
)
server <- function(input, output, session) {
output$results <- renderText(
paste(paste("item", input$foo), collapse = " || ")
)
}
shinyApp(ui, server)
Если вы отключите опцию delimiter = " "
, поведение вернется к нежелательному значению по умолчанию. При копировании из Excel элементы объединяются с пробелами, где selectize.js
ожидает запятые.
https://shiny.rstudio.com/articles/selectize.html
https://github.com/selectize/selectize.js/blob/master/docs/usage.md
library(shiny)
ui <- fluidPage(
selectizeInput(
"foo",
label = "inputs",
choices = "",
multiple = T,
options = list(
delimiter = " ",
create = T
)
),
textOutput("results"),
hr(),
"textInput",
textInput("pasted1", "paste text here"),
h5("Raw hex code points (20 is space, 0a is linefeed"),
textOutput("verb1"),
h5("Vector of results from splitting on '\n'"),
textOutput("split1"),
hr(),
"textAreaInput",
textAreaInput("pasted2", "paste text here"),
h5("Raw hex code points (20 is space, 0a is linefeed"),
textOutput("verb2"),
h5("Vector of results from splitting on '\n'"),
textOutput("split2")
)
server <- function(input, output, session) {
output$results <- renderText(
paste(paste("item", input$foo))
)
output$verb1 <- renderPrint(charToRaw(input$pasted1))
output$split1 <- renderText(
paste(strsplit(input$pasted1, "
"))
)
output$verb2 <- renderPrint(charToRaw(input$pasted2))
output$split2 <- renderText(
paste(strsplit(input$pasted2, "
"))
)
}
shinyApp(ui, server)
Я думаю, что selectizeInput
, как и textInput
, очищает все пробелы, включая переводы строк, в одиночные пробелы. Если вы используете textAreaInput
качестве контейнера, он будет копировать вставленный текст дословно, и вы можете выполнить разбиение на новые строки самостоятельно, а затем использовать этот вектор, где бы вы ни собирались использовать варианты, возвращаемые selectizeInput
.