Ayuda macro formato numerico

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

Ayuda macro formato numerico

Notapor jcmora » Vie Ago 14, 2015 11:43 pm

Hola:
Necesito hacer una macro que le asigne el formato numérico personalizado a 3 columas distintas
los formatos de cada columna son:
\0000
\00000000
\00000000,00

Agradeceria la ayuda
openoffice 4.1.1 Windows 7
jcmora
 
Mensajes: 1
Registrado: Vie Ago 14, 2015 11:38 pm

Re: Ayuda macro formato numerico

Notapor PepeOooSevilla » Sab Ago 15, 2015 9:52 am

Hola.
    1º. Te damos la bienvenida al Foro y, si aún no has leído la Guía de supervivencia, por favor, no dejes de hacerlo.
    2º. Te adjunto un archivo con un ejemplo de una posible solución. Lee también los comentarios incluidos en el código. Adapta el código a tus necesidades.
    Código: Seleccionar todo   Expandir vistaContraer vista
    REM  *****  BASIC  *****
    Option Explicit

    Const ICONO_STOP As Integer = 16
    Const BOTON_ACEPTAR As Integer = 0

    Sub EstablecerFormato

       ' Archivo CALC
       Dim ArchivoCALC As Object
       ' Hoja dentro del archivo. En este ejemplo es la hoja activa
       Dim HojaActiva As Object
       ' Los distintos formatos que necesito
       Dim CadenasFormatos(5) As String

       On Error GoTo TRATAR_ERROR
       
       ArchivoCALC = ThisComponent
       HojaActiva = ArchivoCALC.CurrentController.getActiveSheet()
       ' ¡ATENCIÓN! Estos formatos son para números positivos, el cero y los números negativos aparecerían con el signo - delante
       CadenasFormatos(0) = "\\0000"
       CadenasFormatos(1) = "\\00000000"
       CadenasFormatos(2) = "\\00000000,00"
       ' Si quieres formatear los números negativos para que se VEAN igual que los positivos, entonces
       CadenasFormatos(3) = "\\0000;\\0000"
       CadenasFormatos(4) = "\\00000000;\\00000000"
       CadenasFormatos(5) = "\\00000000,00;\\00000000,00"
       ' Debes tener en cuenta que el número sigue siendo negativo a efectos de operaciones matemáticas, observa el valor en la barra de fórmulas
       With HojaActiva
          With .getCellRangeByName("A1:A10")
             .NumberFormat = IdxFmtPersonalizado(ArchivoCALC, CadenasFormatos(0))
          End With
          With .getCellRangeByName("B1:B10")
             .NumberFormat = IdxFmtPersonalizado(ArchivoCALC, CadenasFormatos(1))
          End With
          With .getCellRangeByName("C1:C10")
             .NumberFormat = IdxFmtPersonalizado(ArchivoCALC, CadenasFormatos(2))
          End With
          With .getCellRangeByName("D1:D10")
             .NumberFormat = IdxFmtPersonalizado(ArchivoCALC, CadenasFormatos(3))
          End With
          With .getCellRangeByName("E1:E10")
             .NumberFormat = IdxFmtPersonalizado(ArchivoCALC, CadenasFormatos(4))
          End With
          With .getCellRangeByName("F1:F10")
             .NumberFormat = IdxFmtPersonalizado(ArchivoCALC, CadenasFormatos(5))
          End With
       End With
       Exit Sub
    TRATAR_ERROR:
       MsgBox "Lo siento pero no puedo mostrar ese formato.", ICONO_STOP + BOTON_ACEPTAR, "¡Atención!"
    End Sub

    Function IdxFmtPersonalizado(DocCalc As Object, CadFmtPersonal As String) As Long
       'Conjunto de formatos en el entorno local para el archivo CALC
       Dim FmtArchivoCalc As Object
       'Índice que identifica a un formato personalizado en el entorno local
       Dim IdxFmt As Long
       '¿En qué idioma y en qué país?
       Dim EntornoLocal As New com.sun.star.lang.Locale

       'Idioma: Español
       EntornoLocal.Language = "ES"
       'País: España
       EntornoLocal.Country = "ES"

       FmtArchivoCalc = DocCalc.NumberFormats
       IdxFmt = FmtArchivoCalc.queryKey(CadFmtPersonal, EntornoLocal, True)
       If IdxFmt = -1 Then
          IdxFmt = FmtArchivoCalc.addNew(CadFmtPersonal, EntornoLocal)
       End If   
       IdxFmtPersonalizado = IdxFmt
    End Function
    3º. Si estás interesado en la programación de macros para OpenOffice tienes que leer el libro de nuestro compañero mauricio Aprendiendo OOo Basic.
    También en las páginas Manuales de Apache OpenOffice en español: Basic y, Basic OpenOffice: Apache OpenOffice Basic en español de nuestro compañero SLV-es, encontrarás muy buena información.
    4º. Y cuando consideres que el tema está resuelto, bien por las respuestas dadas o bien por que has descubierto tú la solución (en este caso deberías compartirla con la comunidad) debes indicarlo (¿Cómo marcar como RESUELTO un tema?), ya que, de esta forma, conseguiremos un Foro más ordenado.
Saludos cordiales.
Adjuntos
FORO_CALC_Ayuda macro formato numerico.ods
AOO 4.1.1
(11.89 KiB) 67 veces
LibreOffice 6.2.7 (64 bits, Still, Empresarial o Estable) en Windows 10. Java 9.0.4 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Avatar de Usuario
PepeOooSevilla
 
Mensajes: 1099
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)


Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados