import pandas as pd
from flask import Flask, request, render_template_string
import os
import re
app = Flask(__name__)
# Directory to store converted CSV files
UPLOAD_FOLDER = 'converted_files'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
@app.route('/')
def index():
return '''
Upload Excel File
'''
@app.route('/upload', methods=['POST'])
def upload_file():
if 'file' not in request.files or 'tracking_no' not in request.form:
return "No file or tracking number provided.", 400
file = request.files['file']
tracking_no = request.form['tracking_no']
filename = file.filename
if not filename.endswith(('.xls', '.xlsx')):
return "Unsupported file type. Please upload an Excel file.", 400
try:
# Read all sheets from the Excel file with no header
file.seek(0) # Reset file pointer
sheet_data = pd.read_excel(file, sheet_name=None, header=None, dtype=str)
result_html = "Tracking Information
"
# Flag to track if the tracking number is found
tracking_found = False
# Define regex pattern for Mail Bag No (e.g., HDOD-L04-2024-47 or similar formats)
mail_bag_pattern = r"\b[A-Za-z]{4,6}-?[A-Za-z0-9]*[-]?[A-Za-z0-9]+\b" # Adjusted pattern to capture variety of formats
# Process each sheet
for sheet_name, df in sheet_data.items():
sheet_found = False # Track if mail bag or # is found in the sheet
# Iterate through every row and column to search for the tracking number
for row_idx, row in df.iterrows():
for col_idx, cell in row.items():
# Convert cell to string before searching
cell_str = str(cell)
# Check for tracking number match
if tracking_no.lower() in cell_str.lower():
tracking_found = True
adjusted_row_idx = row_idx + 1
adjusted_col_idx = col_idx + 1
result_html += f"Tracking No: {tracking_no} found in sheet '{sheet_name}'
"
result_html += f"Row {adjusted_row_idx}, Column {adjusted_col_idx}: {cell_str}
"
# Check for "Mail Bag No" match using regex pattern
if re.search(mail_bag_pattern, cell_str):
mail_bag_no = cell_str.strip()
result_html += f"Mail Bag No: {mail_bag_no}
"
sheet_found = True
# Check for "#" match
if "#" in cell_str:
hash_value = cell_str.strip()
result_html += f"#: {hash_value}
"
sheet_found = True
# If either "Mail Bag No" or "#" was found, display the sheet information
if sheet_found:
result_html += f"Details found in sheet '{sheet_name}'.
"
# Once the tracking number is found, no need to process further sheets
if tracking_found:
break
# If no tracking number was found, display a message
if not tracking_found:
result_html += f"No data found for Tracking No: {tracking_no}
"
return render_template_string(result_html)
except Exception as e:
return f"Error processing file: {e}", 500
if __name__ == '__main__':
app.run(debug=True, port=5000, host='0.0.0.0')