Se añadió la funcionalidad para convertir un archivo Excel de IO desde un esquema eléctrico a formato Markdown en el script `x3_excel_to_md.py`. Se implementó una nueva función `convert_io_excel_to_markdown()` que utiliza la configuración `io_excel_file_from_ediagram` para obtener la ruta del archivo. Además, se actualizó la documentación en `MemoriaDeEvolucion.md` para reflejar estos cambios y se mejoró el manejo de errores durante la conversión. También se unificó la ejecución de ambas conversiones en una función principal `main()` para una mejor organización del flujo de trabajo.
This commit is contained in:
parent
c37e485fd3
commit
4d1de71990
|
@ -66,4 +66,15 @@ Después del paso 2, se puede usar :
|
|||
- La configuración de las rutas base de Obsidian (`ObsideanDir`, `ObsideanProjectsBase`) se ha movido al `level3` para una mejor organización de la configuración.
|
||||
- El prompt generado refleja automáticamente estas rutas configurables, asegurando que las herramientas de IA siempre utilicen las ubicaciones correctas de los archivos.
|
||||
|
||||
**Conversión dual de archivos Excel a Markdown (x3_excel_to_md.py):**
|
||||
- **Nueva funcionalidad**: El script ahora realiza dos conversiones en una sola ejecución:
|
||||
1. Convierte el Excel de tags de TIA Portal a 'Master IO Tags.md' (funcionalidad existente)
|
||||
2. Convierte el Excel de IO desde esquema eléctrico a 'Hardware_ED.md' (nueva funcionalidad)
|
||||
- **Configuración de archivo de IO**: Utiliza la configuración `io_excel_file_from_ediagram` del `level3` para obtener la ruta del archivo Excel de IO desde el esquema eléctrico.
|
||||
- **Conversión directa**: La nueva función `convert_io_excel_to_markdown()` convierte directamente la tabla del Excel a formato Markdown sin filtros ni adaptaciones, manteniendo la estructura original de columnas.
|
||||
- **Manejo de celdas vacías**: Las celdas vacías del Excel se convierten en un espacio ' ' en el archivo Markdown para mantener la estructura de la tabla.
|
||||
- **Manejo de errores robusto**: Incluye validaciones para verificar la existencia del archivo Excel, que no esté vacío, y manejo de excepciones durante la lectura y escritura.
|
||||
- **Escape de caracteres**: Implementa escape automático de caracteres especiales de Markdown (como `|`) para evitar errores de formato en las tablas.
|
||||
- **Función principal unificada**: Se ha creado una función `main()` que ejecuta ambas conversiones secuencialmente, proporcionando una experiencia de usuario más fluida y organizada.
|
||||
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
"level3": {
|
||||
"ObsideanDir": "C:\\Users\\migue\\OneDrive\\Miguel\\Obsidean\\Trabajo\\VM",
|
||||
"ObsideanProjectsBase": "\\04-SIDEL",
|
||||
"io_excel_file_from_ediagram": "C:/Trabajo/SIDEL/13 - E5.007560 - Modifica O&U - SAE235/Reporte/IO.xlsx",
|
||||
"siemens_exp_directory": "C:\\Trabajo\\SIDEL\\13 - E5.007560 - Modifica O&U - SAE235\\Reporte\\ExportTia",
|
||||
"siemens_tia_project": "C:/Trabajo/SIDEL/13 - E5.007560 - Modifica O&U - SAE235/InLavoro/PLC/SSAE0235/_NEW/SAE235_v0.4",
|
||||
"tags_exp_directory": "C:\\Trabajo\\SIDEL\\13 - E5.007560 - Modifica O&U - SAE235\\Reporte\\IOTags"
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""
|
||||
convert Excel Tags to md : This script converts Excel files containing tags into Markdown tables.
|
||||
Updated to work with a single Excel file and filter based on paths defined in a JSON config.
|
||||
Also converts IO Excel file from electrical diagram to Markdown.
|
||||
"""
|
||||
|
||||
# Standard library imports
|
||||
|
@ -116,6 +117,116 @@ def load_path_config():
|
|||
return None
|
||||
|
||||
|
||||
def convert_io_excel_to_markdown():
|
||||
"""
|
||||
Convierte el archivo Excel de IO desde el esquema eléctrico a Markdown.
|
||||
Utiliza la configuración io_excel_file_from_ediagram para obtener la ruta del archivo.
|
||||
"""
|
||||
try:
|
||||
configs = load_configuration()
|
||||
working_directory = configs.get("working_directory")
|
||||
level2_configs = configs.get("level2", {})
|
||||
level3_configs = configs.get("level3", {})
|
||||
io_excel_file = level3_configs.get("io_excel_file_from_ediagram")
|
||||
resultados_exp_directory = level2_configs.get("resultados_exp_directory", ".")
|
||||
|
||||
if not working_directory or not os.path.isdir(working_directory):
|
||||
print(
|
||||
f"Error: El directorio de trabajo '{working_directory}' no es válido."
|
||||
)
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"Error al cargar la configuración: {e}")
|
||||
return False
|
||||
|
||||
working_directory_abs = os.path.abspath(working_directory)
|
||||
print(f"Usando directorio de trabajo: {working_directory_abs}")
|
||||
|
||||
# Construir la ruta del archivo Excel de IO
|
||||
if io_excel_file:
|
||||
excel_file_path = os.path.join(working_directory_abs, io_excel_file)
|
||||
if not os.path.exists(excel_file_path):
|
||||
print(f"Error: El archivo Excel de IO '{excel_file_path}' no existe.")
|
||||
return False
|
||||
else:
|
||||
print("Error: 'io_excel_file_from_ediagram' no está configurado en level3.")
|
||||
return False
|
||||
|
||||
print(f"Procesando archivo Excel de IO: {excel_file_path}...")
|
||||
|
||||
output_dir_abs = os.path.join(working_directory_abs, resultados_exp_directory)
|
||||
os.makedirs(output_dir_abs, exist_ok=True)
|
||||
output_md_filename = "Hardware_ED.md"
|
||||
output_md_filepath_abs = os.path.join(output_dir_abs, output_md_filename)
|
||||
|
||||
try:
|
||||
# Leer el Excel de IO
|
||||
excel_data = pd.read_excel(excel_file_path, sheet_name=0)
|
||||
|
||||
# Verificar que el archivo no esté vacío
|
||||
if excel_data.empty:
|
||||
print(f"Error: El archivo Excel '{excel_file_path}' está vacío.")
|
||||
return False
|
||||
|
||||
# Obtener las columnas del Excel
|
||||
columns = list(excel_data.columns)
|
||||
print(f"Columnas encontradas en el Excel: {columns}")
|
||||
|
||||
# Crear el contenido Markdown
|
||||
markdown_content = []
|
||||
markdown_content.append("# IO desde Esquema Eléctrico\n")
|
||||
|
||||
# Crear la tabla Markdown
|
||||
if len(columns) > 0:
|
||||
# Crear el encabezado de la tabla
|
||||
header = "| " + " | ".join(columns) + " |"
|
||||
markdown_content.append(header)
|
||||
|
||||
# Crear el separador
|
||||
separator = "| " + " | ".join(["---"] * len(columns)) + " |"
|
||||
markdown_content.append(separator)
|
||||
|
||||
# Agregar las filas de datos
|
||||
for _, row in excel_data.iterrows():
|
||||
row_data = []
|
||||
for col in columns:
|
||||
cell_value = str(row.get(col, "")).strip()
|
||||
# Si la celda está vacía, usar un espacio
|
||||
if not cell_value or cell_value == "nan":
|
||||
cell_value = " "
|
||||
# Escapar caracteres especiales de Markdown si es necesario
|
||||
if "|" in cell_value:
|
||||
cell_value = cell_value.replace("|", "\\|")
|
||||
row_data.append(cell_value)
|
||||
|
||||
row_line = "| " + " | ".join(row_data) + " |"
|
||||
markdown_content.append(row_line)
|
||||
|
||||
# Escribir el archivo Markdown
|
||||
try:
|
||||
with open(output_md_filepath_abs, "w", encoding="utf-8") as f:
|
||||
f.write("\n".join(markdown_content))
|
||||
print(
|
||||
f"¡Éxito! Archivo Markdown de IO generado en: {output_md_filepath_abs}"
|
||||
)
|
||||
return True
|
||||
except IOError as e:
|
||||
print(
|
||||
f"Error al escribir el archivo Markdown '{output_md_filepath_abs}': {e}"
|
||||
)
|
||||
return False
|
||||
|
||||
except FileNotFoundError:
|
||||
print(f"Error: El archivo '{excel_file_path}' no se encontró.")
|
||||
return False
|
||||
except pd.errors.EmptyDataError:
|
||||
print(f"Error: El archivo '{excel_file_path}' está vacío.")
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"Error al procesar el archivo Excel de IO: {e}")
|
||||
return False
|
||||
|
||||
|
||||
def convert_excel_to_markdown_tables():
|
||||
"""
|
||||
Busca un archivo Excel en el directorio configurado, lo procesa y genera
|
||||
|
@ -291,5 +402,26 @@ def convert_excel_to_markdown_tables():
|
|||
print("No se generó contenido para el archivo Markdown.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
def main():
|
||||
"""
|
||||
Función principal que ejecuta ambas conversiones:
|
||||
1. Convierte el Excel de tags de TIA Portal a 'Master IO Tags.md'
|
||||
2. Convierte el Excel de IO desde esquema eléctrico a 'IO Adapted.md'
|
||||
"""
|
||||
print("=== Conversión de archivos Excel a Markdown ===\n")
|
||||
|
||||
# 1. Convertir Excel de tags de TIA Portal
|
||||
print("1. Convirtiendo Excel de tags de TIA Portal...")
|
||||
convert_excel_to_markdown_tables()
|
||||
|
||||
print("\n" + "=" * 50 + "\n")
|
||||
|
||||
# 2. Convertir Excel de IO desde esquema eléctrico
|
||||
print("2. Convirtiendo Excel de IO desde esquema eléctrico...")
|
||||
convert_io_excel_to_markdown()
|
||||
|
||||
print("\n=== Proceso completado ===")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
|
@ -1,5 +1,18 @@
|
|||
{
|
||||
"history": [
|
||||
{
|
||||
"id": "5115260f",
|
||||
"group_id": "2",
|
||||
"script_name": "main.py",
|
||||
"executed_date": "2025-07-14T14:04:23.520003Z",
|
||||
"arguments": [],
|
||||
"working_directory": "D:/Proyectos/Scripts/RS485/MaselliSimulatorApp",
|
||||
"python_env": "tia_scripting",
|
||||
"executable_type": "pythonw.exe",
|
||||
"status": "running",
|
||||
"pid": 39460,
|
||||
"execution_time": null
|
||||
},
|
||||
{
|
||||
"id": "8f721c30",
|
||||
"group_id": "2",
|
||||
|
|
40
data/log.txt
40
data/log.txt
|
@ -1,21 +1,19 @@
|
|||
[18:10:38] Iniciando ejecución de x4_prompt_generator.py en C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens...
|
||||
[18:10:38] Generador de prompt para adaptación de IO
|
||||
[18:10:38] =========================================
|
||||
[18:10:38] Usando directorio de trabajo: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens
|
||||
[18:10:38] Usando ruta de Obsidian desde configuración: C:\Users\migue\OneDrive\Miguel\Obsidean\Trabajo\VM\04-SIDEL\00 - MASTER\MIXER\IO
|
||||
[18:10:38] Usando carpeta de equivalencias en Obsidian: C:\Users\migue\OneDrive\Miguel\Obsidean\Trabajo\VM\04-SIDEL\00 - MASTER\MIXER\IO
|
||||
[18:10:38] ¡Prompt generado y copiado al portapapeles con éxito!
|
||||
[18:10:38] Prompt guardado en: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens\IO_Adaptation_Prompt.txt
|
||||
[18:11:10] Ejecución de x4_prompt_generator.py finalizada (success). Duración: 0:00:31.385093.
|
||||
[18:11:10] Log completo guardado en: D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\IO_adaptation\.log\log_x4_prompt_generator.txt
|
||||
[10:11:20] Ejecutando script GUI: main.py
|
||||
[10:11:20] Entorno Python: tia_scripting
|
||||
[10:11:20] Ejecutable: pythonw.exe (sin logging)
|
||||
[10:11:20] Comando: C:\Users\migue\miniconda3\envs\tia_scripting\pythonw.exe D:/Proyectos/Scripts/RS485/MaselliSimulatorApp\main.py
|
||||
[10:11:20] Directorio: D:/Proyectos/Scripts/RS485/MaselliSimulatorApp
|
||||
[10:11:20] Encoding: UTF-8 (PYTHONUTF8=1, PYTHONIOENCODING=utf-8)
|
||||
[10:11:20] ==================================================
|
||||
[10:11:20] Script GUI ejecutado sin logging (pythonw.exe)
|
||||
[10:11:20] PID: 22396
|
||||
[10:11:20] ==================================================
|
||||
[10:11:20] ID de ejecución: 8f721c30
|
||||
[16:52:51] Iniciando ejecución de x3_excel_to_md.py en C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens...
|
||||
[16:52:52] === Conversión de archivos Excel a Markdown ===
|
||||
[16:52:52] 1. Convirtiendo Excel de tags de TIA Portal...
|
||||
[16:52:52] Usando directorio de trabajo: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens
|
||||
[16:52:52] Configuración de paths cargada desde: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens\io_paths_config.json
|
||||
[16:52:52] Buscando archivos Excel en: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\IOTags
|
||||
[16:52:52] Archivo Excel encontrado automáticamente: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\IOTags\All_PLCTags.xlsx
|
||||
[16:52:52] Procesando archivo Excel: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\IOTags\All_PLCTags.xlsx...
|
||||
[16:52:52] Paths configurados para procesar: ['Inputs', 'Outputs', 'OutputsFesto', 'IO Not in Hardware\\InputsMaster', 'IO Not in Hardware\\OutputsMaster']
|
||||
[16:52:53] ¡Éxito! Archivo Markdown generado en: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens\Resultados\Master IO Tags.md
|
||||
[16:52:53] ==================================================
|
||||
[16:52:53] 2. Convirtiendo Excel de IO desde esquema eléctrico...
|
||||
[16:52:53] Usando directorio de trabajo: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens
|
||||
[16:52:53] Procesando archivo Excel de IO: C:/Trabajo/SIDEL/13 - E5.007560 - Modifica O&U - SAE235/Reporte/IO.xlsx...
|
||||
[16:52:53] Columnas encontradas en el Excel: ['Unnamed: 0', 'Unnamed: 1', 'Unnamed: 2', 'Unnamed: 3', 'Unnamed: 4', 'Unnamed: 5']
|
||||
[16:52:53] ¡Éxito! Archivo Markdown de IO generado en: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens\Resultados\Hardware_ED.md
|
||||
[16:52:53] === Proceso completado ===
|
||||
[16:52:53] Ejecución de x3_excel_to_md.py finalizada (success). Duración: 0:00:01.794236.
|
||||
[16:52:53] Log completo guardado en: D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\IO_adaptation\.log\log_x3_excel_to_md.txt
|
||||
|
|
Loading…
Reference in New Issue