Copiar solo celda seleccionada

Buenos días,
Aunque la funcionalidad de copiar y pegar desde rejillas es excelente, ya que permite sacar datos para trabajarlos desde hojas de cálculo, a veces, necesito poder copiar solo el contenido de la celda seleccionada, y no la fila entera, ¿es posible hacerlo?

No encuentro a nadie en el foro que haya tenido este problema o necesidad, por lo que me hace pensar que es una tontería en la que no estoy cayendo..

Por más que lo intento no consigo encontrar la forma.

Gracias por la ayuda!

Saludos
Carlos

Buenos días,
Que yo sepa, no se puede.
Siempre copia el contenido de todas las columnas que tiene la rejilla.
Solo mediante proceso podrás exportar directamente el contenido de la columna de los registros seleccionados.
Saludos, Luis.

Gracias por tu rapidísima respuesta overBCN!

Le estaba dando vueltas por todos lados porque me parece rarísimo que esto no sea posible.
He podido ver que en versiones anteriores, la copia por defecto era solo la celda seleccionada, pero desde una de las actualizaciones ya quedó así.

¿Podrías orientarme un poco de cómo podría controlar esta copia en un proceso?

Muchas gracias por tu ayuda!

Saludos
Carlos

Hola Carlos,
Sobre las líneas seleccionadas de la rejilla, lanzas un proceso, que sería como el que te adjunto en la imagen.
En la linea que verás destacada, pones los campos que quieres exportar.
Este fichero de texto está delimitado por tabuladores.
Espero te sirva.
Saludos.

Hola carlos_barroso.

Aparte de lo que te propone @overall puedes hacer uso de las variables especiales y un poco del API, nada complicado.

Usa este código en cualquier evento de la Rejilla, por ejemplo el Doble_Click.
El Array EVENT_PARAMS contiene la Fila y la Columna donde se ha pulsado el ratón.

Set ( NFILA, EVENT_PARAMS[1] )
Set ( NCOL, EVENT_PARAMS[2] )
// Mensaje ( "Fila " + NFILA + " Columna " + NCOL, Información, , )
Interfaz: Ejecutar manejador de evento ( DATO_CELDA_JS, LOK )

Y el siguiente código JavaScript DATO_CELDA_JS usa la función data() de la clase VGridListDataView.

var oRejilla = theRoot.dataView()
// Fila y Columna de la celda sobre la que deseamos obtener el valor
var nFila = theRoot.varToInt(“NFILA”)
var nCol = theRoot.varToInt(“NCOL”)
var vValor = oRejilla.data(nFila, nCol)
// Copiar al portapapeles
theApp.clipboard().setText(vValor)
alert("Valor de la celda " + nFila + “,” + nCol + " = " + vValor)

Pruébalo.

Saludos
Paco Satué

Muchísimas gracias a los dos por las propuestas.

Finalmente he optado por la opción de Paco, y funciona perfectamente!

Supongo que algún día Velneo dará la posibilidad de que se pueda copiar los datos de las celdas individualmente, mientras me apañaré con esto.

Gracias de nuevo!

Hola otra vez,
Disculpad que continúe este hilo, aunque conseguí con vuestros consejos mi primer objetivo, no consigo dar con la tecla para poder aplicarlo en mi solución.

El problema se me presenta cuando tengo la rejilla dentro de un alternador de lista, y quiero que desde la toolbar del alternador de lista, se pueda lanzar la acción que copia el valor de la celda.

No consigo que el alternador de lista acceda a la array EVENT_PARAMS de la rejilla para conocer la celda seleccionada y posteriormente el valor de la misma

¿Es posible hacerlo de alguna forma?

Gracias por la ayuda

Saludos
Carlos

Hola carlos_barroso.

Bueno, eso ya es otra historia. El problema es que el API no nos dice qué fila/columna está seleccionada en la Rejilla. Tenemos que usar un evento del ratón para que el EVENT_PARAMS guarde los valores de Fila/Columna.

Probamos de otra forma.

  • Usa en la Rejilla el evento Ítem: simple-click en lugar de doble-click. En el Manejador asociado simplemente guarda la Fila y Columna de la celda seleccionada.

    Rem: Manejador SIMPLE_CLICK de la Rejilla
    Set ( NFILA, EVENT_PARAMS[1] )
    Set ( NCOL, EVENT_PARAMS[2] )
    
  • La Acción ACC_COPIAR_CELDA de la Toolbar del Alternador tendrá como Comando la opción Disparar señal.

  • En el Alternador que contiene la Rejilla añade una Conexión de evento con la señal Acción disparada del objeto ACC_COPIAR_CELDA y el Manejador de evento de tipo JavaScript DATO_CELDA_JS con el siguiente código:

    // Manejador JavaScript DATO_CELDA_JS del Alternador de Lista
    var oRejilla = theRoot.dataView().dataViewActive()
    // Comprobar que la Vista activa es una Rejilla con el ID correcto
    if (oRejilla.viewType() == 0 && oRejilla.objectInfo().id() == "GRD_FICHAS") {
      var nFila = oRejilla.root().varToInt("NFILA")
      var nCol = oRejilla.root().varToInt("NCOL")
      var vValor = oRejilla.data(nFila, nCol)
      // Copiar al portapapeles
      theApp.clipboard().setText(vValor)
      alert("Valor de la celda " + nFila + "," + nCol + " = " + vValor)
    }
    

Pruébalo.

Saludos
Paco Satué

Probado y funcionando, te estoy muy agradecido Paco Satué, no solo me diste la solución, sino que además aprendo mucho, como siempre con cada una de las respuestas que te leo.

Gracias!

Saludos
Carlos