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.
|
- 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.
|
- 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": {
|
"level3": {
|
||||||
"ObsideanDir": "C:\\Users\\migue\\OneDrive\\Miguel\\Obsidean\\Trabajo\\VM",
|
"ObsideanDir": "C:\\Users\\migue\\OneDrive\\Miguel\\Obsidean\\Trabajo\\VM",
|
||||||
"ObsideanProjectsBase": "\\04-SIDEL",
|
"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_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",
|
"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"
|
"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.
|
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.
|
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
|
# Standard library imports
|
||||||
|
@ -116,6 +117,116 @@ def load_path_config():
|
||||||
return None
|
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():
|
def convert_excel_to_markdown_tables():
|
||||||
"""
|
"""
|
||||||
Busca un archivo Excel en el directorio configurado, lo procesa y genera
|
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.")
|
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()
|
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": [
|
"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",
|
"id": "8f721c30",
|
||||||
"group_id": "2",
|
"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...
|
[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...
|
||||||
[18:10:38] Generador de prompt para adaptación de IO
|
[16:52:52] === Conversión de archivos Excel a Markdown ===
|
||||||
[18:10:38] =========================================
|
[16:52:52] 1. Convirtiendo Excel de tags de TIA Portal...
|
||||||
[18:10:38] Usando directorio de trabajo: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens
|
[16:52:52] 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
|
[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
|
||||||
[18:10:38] Usando carpeta de equivalencias en Obsidian: C:\Users\migue\OneDrive\Miguel\Obsidean\Trabajo\VM\04-SIDEL\00 - MASTER\MIXER\IO
|
[16:52:52] Buscando archivos Excel en: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\IOTags
|
||||||
[18:10:38] ¡Prompt generado y copiado al portapapeles con éxito!
|
[16:52:52] Archivo Excel encontrado automáticamente: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\IOTags\All_PLCTags.xlsx
|
||||||
[18:10:38] Prompt guardado en: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens\IO_Adaptation_Prompt.txt
|
[16:52:52] Procesando archivo Excel: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\IOTags\All_PLCTags.xlsx...
|
||||||
[18:11:10] Ejecución de x4_prompt_generator.py finalizada (success). Duración: 0:00:31.385093.
|
[16:52:52] Paths configurados para procesar: ['Inputs', 'Outputs', 'OutputsFesto', 'IO Not in Hardware\\InputsMaster', 'IO Not in Hardware\\OutputsMaster']
|
||||||
[18:11:10] Log completo guardado en: D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\IO_adaptation\.log\log_x4_prompt_generator.txt
|
[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
|
||||||
[10:11:20] Ejecutando script GUI: main.py
|
[16:52:53] ==================================================
|
||||||
[10:11:20] Entorno Python: tia_scripting
|
[16:52:53] 2. Convirtiendo Excel de IO desde esquema eléctrico...
|
||||||
[10:11:20] Ejecutable: pythonw.exe (sin logging)
|
[16:52:53] Usando directorio de trabajo: C:\Trabajo\SIDEL\13 - E5.007560 - Modifica O&U - SAE235\Reporte\Analisis\Siemens
|
||||||
[10:11:20] Comando: C:\Users\migue\miniconda3\envs\tia_scripting\pythonw.exe D:/Proyectos/Scripts/RS485/MaselliSimulatorApp\main.py
|
[16:52:53] Procesando archivo Excel de IO: C:/Trabajo/SIDEL/13 - E5.007560 - Modifica O&U - SAE235/Reporte/IO.xlsx...
|
||||||
[10:11:20] Directorio: D:/Proyectos/Scripts/RS485/MaselliSimulatorApp
|
[16:52:53] Columnas encontradas en el Excel: ['Unnamed: 0', 'Unnamed: 1', 'Unnamed: 2', 'Unnamed: 3', 'Unnamed: 4', 'Unnamed: 5']
|
||||||
[10:11:20] Encoding: UTF-8 (PYTHONUTF8=1, PYTHONIOENCODING=utf-8)
|
[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
|
||||||
[10:11:20] ==================================================
|
[16:52:53] === Proceso completado ===
|
||||||
[10:11:20] Script GUI ejecutado sin logging (pythonw.exe)
|
[16:52:53] Ejecución de x3_excel_to_md.py finalizada (success). Duración: 0:00:01.794236.
|
||||||
[10:11:20] PID: 22396
|
[16:52:53] Log completo guardado en: D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\IO_adaptation\.log\log_x3_excel_to_md.txt
|
||||||
[10:11:20] ==================================================
|
|
||||||
[10:11:20] ID de ejecución: 8f721c30
|
|
||||||
|
|
Loading…
Reference in New Issue