none
Obtener celda a partir de posición RRS feed

  • Pregunta

  • ¡Hola!

    En Excel, automatizando mediante .net, un gráfico se añade usando una posición medida en píxeles (no en columnas).

     

    ¿Hay alguna manera de, dada una posición del tipo (x,y) saber qué celda contiene ese punto?

     

    Gracias!

    miércoles, 28 de abril de 2010 20:17

Respuestas

  • hola, Oscar !

    (creo que) comenzamos a necesitar una comunicacion mas efectiva, me explico:

    "charts" es una coleccion de objetos "chart" al igual que "chartobjects" es la coleccion de objetos "chartobject" (depende del como hagas la insercion de tus graficas en la hoja ?)

    un grafico incrustado en hoja de excel es un objeto "chartobject" y para ubicarlo dentro de la coleccion "chartobjects" (pural) debes hacer referencia a su indice (p.e.) activesheet.chartobjects(1) o a su nombre (p.e.) activesheet.chartobjects("gráfico 2") tomando en cuenta el idioma (este ejemplo fue para espanol, por el acento en la "a") aunque pordia resultar mas conveniente referir al nombre en ingles ("chart 2")

    seria conveniente asignar un nombre al objeto incrustado al momento mismo de su insercion o saber exactamente su numero de indice dentro de la coleccion de objetos de su clase (asi mantientes un mejor control para referencias futuras)

    una vez identificado el objeto incrustado, ya puedes administrar sus propiedades/metodos/... (p.e.)

      dim fila as integer, col as byte

      with activesheet.chartobjects(1)
        fila = .bottomrightcell.row
        col = .topleftcell.column
      end with

    y la tabla la podrias iniciar a partir de las variables anteriores (p.e.)

      <objeto excel u hoja>.cells(fila, col)........ (etc.)

    saludos,

    hector.

    • Marcado como respuesta Óscar viernes, 7 de mayo de 2010 13:30
    domingo, 2 de mayo de 2010 18:54

Todas las respuestas

  • hola, Oscar !

    (hasta donde se) los pixeles se refieren a puntos en la pantalla (monitor) y podrian ser irreleventes en relacion con la parte de la pantalla que utiliza la ventana de una aplicacion, que (por cierto) aunque en excel existen propiedades aplicables a un objeto window como: <window>.PointsToScreenPixelsX y <window>.PointsToScreenPixelsY podria ser mas retribuible ubicar la posicion de objetos por las propiedades .Top y .Left en relacion con alguna celda, que se miden en "puntos de document" (desde la parte superior-izquierda de la ventana de la aplicacion, p.e.)

    with <el objeto a incrustar>
      .top = range("b5").top
      .left = range("b5").left
    end with

    saludos,

    hector.

    viernes, 30 de abril de 2010 0:51
  • Gracias, Héctor. El problema es que inserto un objeto (ese sí sé cómo colocarlo): un gráfico.

    Después del gráfico va una tabla. Lo que quiero es saber qué celda queda hacia abajo del gráfico, para que no se superpongan. Y, correcto, lo que necesito no son píxelees sino "puntos de document".

    Muchas gracias,

       Óscar S

    domingo, 2 de mayo de 2010 1:27
  • hola, Oscar !

    podrias identificar la celda donde termina la grafica incrustada +/- asi:

      dim fila as integer, col as byte

      with <objeto grafica incrustado>
        fila = .bottomrightcell.row
        col = .topleftcell.column
      end with

    y la tabla la podrias iniciar a partir de las variables anteriores (p.e.)

      <objeto excel u hoja>.cells(fila, col)........ (etc.)

    saludos,
    hector.

    domingo, 2 de mayo de 2010 4:23
  • Mmmm... Yo lo que tengo es un objeto Chart dentro de Charts... ¿Es diferente un ChartObject que es el que tiene esas propiedades de bottomright y topleft? ¿Tengo que hacer alguna clase de conversión?

     

    Gracias de nuevo,

       Óscar

    • Editado Óscar domingo, 2 de mayo de 2010 4:34 No di gracias xD
    domingo, 2 de mayo de 2010 4:33
  • hola, Oscar !

    (creo que) comenzamos a necesitar una comunicacion mas efectiva, me explico:

    "charts" es una coleccion de objetos "chart" al igual que "chartobjects" es la coleccion de objetos "chartobject" (depende del como hagas la insercion de tus graficas en la hoja ?)

    un grafico incrustado en hoja de excel es un objeto "chartobject" y para ubicarlo dentro de la coleccion "chartobjects" (pural) debes hacer referencia a su indice (p.e.) activesheet.chartobjects(1) o a su nombre (p.e.) activesheet.chartobjects("gráfico 2") tomando en cuenta el idioma (este ejemplo fue para espanol, por el acento en la "a") aunque pordia resultar mas conveniente referir al nombre en ingles ("chart 2")

    seria conveniente asignar un nombre al objeto incrustado al momento mismo de su insercion o saber exactamente su numero de indice dentro de la coleccion de objetos de su clase (asi mantientes un mejor control para referencias futuras)

    una vez identificado el objeto incrustado, ya puedes administrar sus propiedades/metodos/... (p.e.)

      dim fila as integer, col as byte

      with activesheet.chartobjects(1)
        fila = .bottomrightcell.row
        col = .topleftcell.column
      end with

    y la tabla la podrias iniciar a partir de las variables anteriores (p.e.)

      <objeto excel u hoja>.cells(fila, col)........ (etc.)

    saludos,

    hector.

    • Marcado como respuesta Óscar viernes, 7 de mayo de 2010 13:30
    domingo, 2 de mayo de 2010 18:54
  • ¡Hola, Héctor!

    Pues muchísimas gracias, eso es justamente lo que necesitaba.

     

    Saludos,

    Óscar

    viernes, 7 de mayo de 2010 13:30