jueves, 24 de febrero de 2022

Importando fichero SINLI LIBROS a Microsoft Excel (versión 2)

En este caso importaremos el fichero SINLI pero para ello usaremos el componente Power Query de Microsoft Excel.



Este componente nos va a permitir tratar el fichero e importar solo partes de él o crear campos adicionales a partir de lo existentes.


miércoles, 23 de febrero de 2022

Importando fichero SINLI LIBROS a Microsoft Excel (versión 1)

Hoy os traigo el proceso completo para importar las líneas de detalle de un fichero SINLI LIBROS en su versión 8, a Microsoft Excel.

Este formato es el se usa habitualmente para enviar la información del catálogo desde los editores a distribuidores y libreros.


La ventaja es que una vez preparado se puede reutilizar con facilidad.

viernes, 18 de febrero de 2022

Ejemplo de fichero SINLI

Hoy os traigo un ejemplo real de un fichero SINLI.

En la imagen se muestra el encabezado y la primera línea de detalle.

Las especificaciones son las siguientes.

Cada uno de los datos se puede localizar por su distancia al principio de la línea.

El siguiente paso es importarlo a Microsoft Excel.

jueves, 17 de febrero de 2022

Importación de catálogo de libros en formato SINLI a Microsoft Excel parte 2 saltarse el encabezado

¿Alguna vez os habéis parado a pensar que en una hoja de cálculo es posible indicar la primera fila desde la que importar datos de un fichero externo, pero no la última?


Esta característica está pensada para importar ficheros que incluyen algún tipo de cabecera, como es el caso de los formatos SINLI.

Lo único que tendremos que hacer es indicar la primera línea que queremos importar a Microsoft Excel desde el fichero de texto plano.



Este es un comportamiento estándar de todas las hojas de cálculo.

Apoyándonos en esta característica, podremos cargar directamente las líneas de detalle a nuestra hoja de cálculo.

miércoles, 16 de febrero de 2022

Importación de catálogo de libros en formato SINLI a Microsoft Excel

El estándar SINLI es un conjunto de protocolos enfocados a la cadena de venta y distribución del libro.

A diferencia del estándar EDI el cual es genérico, este es mucho más sencillo, ya que se centra solamente en el mundo del libro.

Se compone de diversos ficheros en texto plano que permiten el intercambio de información entre ordenadores.

Cada mensaje tiene su propio formato asociado.

La última versión de los formatos se puede consultar en la siguiente dirección:

http://www.fande.es/sinli_indicedocumentos.html

Los ficheros SINLI, a diferencia de los ficheros en formato CSV, los cuales tienen la misma estructura en todas sus líneas, se componen de una sección de encabezado y otra de líneas de detalle.

El encabezado tiene la siguiente estructura, pero a la hora de importar a Microsoft Excel, la vamos a ignorar.

En cuanto a las líneas de detalle tienen todas la misma estructura, tratándose de datos de ancho fijo, llagando cada línea a poder alcanzar más de 3000 caracteres 


A la hora de importar estos datos a Excel, lo haremos desde la opción Datos o directamente al abrir el fichero.

Indicaremos para ello la posición indicada en la columna Acumulado del documento que define el estándar.


Este es un trabajo árduo por lo que recomiendo crear un fichero al que podamos importar nuestros datos y luego reutilizarlo, evitando tener que definir las posiciones cada vez que deseemos importar datos.

viernes, 11 de febrero de 2022

Introduciendo la instrucción Select Case en VBA para Microsoft Excel

Una forma más simple de escribir un conjunto de instrucciones condicionales en VBA es usando la instrucción Select Case.



El código de hoy es el siguiente:




Option Explicit


Sub condicional()

    

    'Declaramos una variable numerica

    Dim dia As Integer

    Dim dato As String

    

    dato = Range("B2").Value


    If (Not IsNumeric(dato)) Then

        MsgBox ("Error, has introducido un valor no numérico")

    Else

        dia = CInt(dato)

    

    Select Case dato

        Case 1:

            MsgBox ("lunes")

        Case 2:

            MsgBox ("martes")

        Case 3:

            MsgBox ("miercoles")

        Case 4:

            MsgBox ("jueves")

        Case 5:

            MsgBox ("viernes")

        Case 6:

            MsgBox ("sabado")          

        Case 7:

            MsgBox ("domingo")

    End Select 

    End If

End Sub



La instrucción es mucho más sencilla de escribir que un grupo de condicionales.

En la siguiente imagen vemos la estructura básica.

En la primera línea identificamos la variable a evaluar, y en cada select indicamos las instrucciones que ejecuta si contiene ese valor.




Esta instrucción es mucho más potente, y lo iremos viendo en próximas publicaciones.

jueves, 10 de febrero de 2022

Usando celdas con nombre en VBA para Microsoft Excel

A diferencia de las formulas de Microsoft Excel en las cuales si insertamos una columna las referencias de las celdas se actualizan automáticamente, en Visual Basic no sucede eso.

Si en visual Basic, una vez que ya tenemos el código programado, introducimos en el Excel una columna, el programa no se entera del cambio de dirección de la celda y sigue usando la referencia original, provocando de esta manera que se acceda a celdas incorrectas.

Una posible solución a esto, es usar celdas con nombre ya que al cambiar la ubicación de la celda el nombre acompañada a la celda.

Para ello usaremos el método Range con el nombre de la celda en lugar de la referencia.





Este es el código que usamos en el ejemplo de hoy:



Option Explicit

Sub condicional()
    
    'Declaramos una variable numerica
    Dim dia As Integer
    Dim dato As String
    
    dato = Range("celdaAmarilla").Value

    If (Not IsNumeric(dato)) Then
        MsgBox ("Error, has introducido un valor no numérico")
    Else
        dia = CInt(dato)
    
        If (dia = 1) Then MsgBox ("lunes")
    
        If (dia = 2) Then MsgBox ("martes")
    
        If (dia = 3) Then MsgBox ("miercoles")
    
        If (dia = 4) Then MsgBox ("jueves")
    
        If (dia = 5) Then MsgBox ("viernes")
    
        If (dia = 6) Then MsgBox ("sabado")
    
        If (dia = 7) Then MsgBox ("domingo")
        
        If (dia < 1) Then MsgBox ("Error, has introducido un error demasiado pequeño")
        
        If (dia > 7) Then MsgBox ("Error, has introducido un error demasiado grande")
        
    End If
    
End Sub



En concreto la instrucción que nos va a permitir no depender de la ubicación de la celda es la que se muestra a continuación resaltada.

dato = Range("celdaAmarilla").Value




Una vez asignado el nombre a una celda o rango, este va a acompañar a la celda aunque se inserten o eliminen filas o columnas.

Originalmente la columna con el número del día estaba en la celda "B2".

En esta posición le asignamos el nombre "celdaAmarilla".


Posteriormente, insertamos una columna, pasando a estar la celda en la ubicación "C2".



Pero como vemos, la celda sigue manteniendo el nombre asignado.