From 948f9363c7be486839d19cf2e0bc17e4b1c25f89 Mon Sep 17 00:00:00 2001 From: Thaddeus Hughes Date: Thu, 9 Oct 2025 08:45:36 -0500 Subject: [PATCH] xlsx output --- .~lock.LogAB(20).joined.csv# | 1 + .~lock.LogAB(20).xls# | 1 + LogAB(20).xls | Bin 0 -> 67584 bytes LogAB(20).xlsx | Bin 0 -> 44303 bytes main.py | 56 ++++++++++++++++++++++++++++++++++- template.xlsx | Bin 0 -> 50902 bytes 6 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 .~lock.LogAB(20).joined.csv# create mode 100644 .~lock.LogAB(20).xls# create mode 100644 LogAB(20).xls create mode 100644 LogAB(20).xlsx create mode 100644 template.xlsx diff --git a/.~lock.LogAB(20).joined.csv# b/.~lock.LogAB(20).joined.csv# new file mode 100644 index 0000000..38b71a4 --- /dev/null +++ b/.~lock.LogAB(20).joined.csv# @@ -0,0 +1 @@ +,DESKTOP-M40GG9U/Thad,DESKTOP-M40GG9U,09.10.2025 08:10,file:///C:/Users/Thad/AppData/Roaming/LibreOffice/4; \ No newline at end of file diff --git a/.~lock.LogAB(20).xls# b/.~lock.LogAB(20).xls# new file mode 100644 index 0000000..ed05703 --- /dev/null +++ b/.~lock.LogAB(20).xls# @@ -0,0 +1 @@ +,DESKTOP-M40GG9U/Thad,DESKTOP-M40GG9U,09.10.2025 08:40,file:///C:/Users/Thad/AppData/Roaming/LibreOffice/4; \ No newline at end of file diff --git a/LogAB(20).xls b/LogAB(20).xls new file mode 100644 index 0000000000000000000000000000000000000000..73b24c385235915511202f796ce8f41e659b6d29 GIT binary patch literal 67584 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 b-};|w|Lw;A_WcKc{{MFSzrVu&)BXP!`bZ!T literal 0 HcmV?d00001 diff --git a/LogAB(20).xlsx b/LogAB(20).xlsx new file mode 100644 index 0000000000000000000000000000000000000000..bc0743c16e153f9d329eff0013f2f2255400c092 GIT binary patch literal 44303 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 L9KZh^=->Vi&tyEW literal 0 HcmV?d00001 diff --git a/main.py b/main.py index 10afe23..11a368f 100644 --- a/main.py +++ b/main.py @@ -5,6 +5,12 @@ from tkinter import filedialog, messagebox import subprocess import os from datetime import datetime +import shutil +try: + from openpyxl import load_workbook + XLSX_AVAILABLE = True +except ImportError: + XLSX_AVAILABLE = False def parse_logs(log_text): lines = log_text.splitlines() @@ -72,6 +78,42 @@ def write_csv2(pairs, filename): gross_weight, gross_units, gross_time = pairs[-1] writer.writerow([gross_weight, '', '', gross_time, '', gross_units, '', '']) +def write_xlsx(pairs, output_filename, template_path='template.xlsx'): + """Write sequential data to XLSX file using template""" + if not XLSX_AVAILABLE: + raise ImportError("openpyxl is required for XLSX export. Install with: pip install openpyxl") + + if not os.path.exists(template_path): + raise FileNotFoundError(f"Template file not found: {template_path}") + + # Load the template workbook (data_only=False preserves formulas) + wb = load_workbook(template_path, data_only=False) + + # Check if SEQUENTIAL sheet exists + if 'SEQUENTIAL' not in wb.sheetnames: + raise ValueError("Template does not contain a 'SEQUENTIAL' sheet") + + # Get the SEQUENTIAL sheet + ws = wb['SEQUENTIAL'] + + # Clear existing data (starting from row 2, assuming row 1 has headers) + # First, delete all rows below the header + if ws.max_row > 1: + ws.delete_rows(2, ws.max_row - 1) + + # Write new data starting from row 2 + for row_idx, (weight, units, timestamp) in enumerate(pairs, start=2): + ws.cell(row=row_idx, column=1, value=weight) + ws.cell(row=row_idx, column=2, value=units) + ws.cell(row=row_idx, column=3, value=timestamp) + + # Set COMBINED as the active sheet (default sheet when opened) + if 'COMBINED' in wb.sheetnames: + wb.active = wb.sheetnames.index('COMBINED') + + # Save to new filename (never overwrite template) + wb.save(output_filename) + def run_update_script(): try: # Run update.sh script @@ -101,6 +143,7 @@ def process_files(): base = os.path.splitext(input_file)[0] output_file1 = f"{base}.sequential.csv" output_file2 = f"{base}.joined.csv" + output_xlsx = f"{base}.xlsx" try: with open(input_file, 'r') as f: @@ -108,7 +151,18 @@ def process_files(): pairs = parse_logs(log_text) write_csv1(pairs, output_file1) write_csv2(pairs, output_file2) - messagebox.showinfo("Success", f"CSV files generated:\n{output_file1}\n{output_file2}") + + # Try to write XLSX file + xlsx_msg = "" + try: + write_xlsx(pairs, output_xlsx) + xlsx_msg = f"\n{output_xlsx}" + except ImportError as e: + xlsx_msg = f"\n\nXLSX export skipped: {str(e)}" + except Exception as e: + xlsx_msg = f"\n\nXLSX export failed: {str(e)}" + + messagebox.showinfo("Success", f"Files generated:\n{output_file1}\n{output_file2}{xlsx_msg}") except Exception as e: messagebox.showerror("Error", f"An error occurred: {str(e)}") diff --git a/template.xlsx b/template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6ca4829491d1f8e70a32c1ada3d5e9bff7b4853f GIT binary patch literal 50902 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 literal 0 HcmV?d00001