Los scripts son geniales para automatizar tareas de poco valor y que son repetitivas. Uno de los problemas con los que me he encontrado y que más pereza me da es la actualización de catálogos desde un archivo de Excel. Las actualizaciones de los catálogos se proporcionan a través de una hoja de cálculo, muy práctico para el usuario final, muy incómodo para el programador. Decidí escribir scripts que permitan aplicar las actualizaciones automáticamente sin tener que dedicarle tiempo. Quizá con una tarea programada o un build del servidor de CI.
La problemática.
Se requiere elaborar un script en PowerShell que permita generar un script Sql para los proyectos de bases de datos. Se debe de leer desde el archivo Excel, validar mínimamente los datos y posteriormente generar un script compatible con los proyectos de base de datos de Visual Studio.
¿Como leer desde Excel?.
Como programador .Net, debes de saber que cualquier lectura o escritura en archivos de MS Office es un problema. Microsoft provee componentes de comunicación directos para esta labor, pero es necesario tener instalado Office en cualquier equipo donde se vaya a ejecutar la aplicación. Difícilmente vas a poder tener una licencia de Office en un servidor productivo.
Afortunadamente, encontré un módulo de PS lo suficientemente competente para realizar la tarea que necesito. El módulo es: PSExcel.
Archivo de Pruebas.
Puedes descargar el archivo de pruebas aquí.
¿Cómo está escrito el Script?.
El script se compone de una función principal que es: Procesa-Pedimentos. Esta función lee desde el archivo Excel, después efectúa unas validaciones mínimas, crea el script Sql y lo guarda en la ruta definida en los argumentos. Las demás funciones son auxiliares al método principal.
Ejecutar el Script.
Conclusiones.
Espero este script te pueda servir de base para tus propios proyectos de automatización.
Autor imagen: CyberHades
- NVL in SQL Server - 2023-11-01
- ¿Que es Cake Build? - 2023-02-22
- #How to fix error: MSB4019: The imported project «Microsoft.Data.Tools.Schema.SqlTasks.targets» was not found - 2023-02-20