import http.server import urllib.parse import os import io import openpyxl import pandas as pd import json PORT = 8000 html_template = ''' Excel Editor

Excel Editor


''' class ExcelHandler(http.server.BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() self.wfile.write(html_template.encode('utf-8')) def do_POST(self): content_length = int(self.headers['Content-Length']) content_type = self.headers['Content-Type'] if 'multipart/form-data' in content_type: boundary = content_type.split("=")[1].encode() remaining_bytes = content_length line = self.rfile.readline() remaining_bytes -= len(line) if boundary in line: line = self.rfile.readline() remaining_bytes -= len(line) headers = {} while line.strip(): key, value = line.decode().split(": ", 1) headers[key] = value.strip() line = self.rfile.readline() remaining_bytes -= len(line) if 'filename' in headers.get('Content-Disposition', ''): line = self.rfile.readline() remaining_bytes -= len(line) file_data = b'' while remaining_bytes > 0: line = self.rfile.readline() remaining_bytes -= len(line) file_data += line file_data = file_data.split(b"\r\n")[0] # Remove boundary at the end excel_data = self.process_excel(file_data) self.send_response(200) self.send_header("Content-type", "application/json") self.end_headers() self.wfile.write(excel_data.encode('utf-8')) else: self.send_response(400, 'No file uploaded') elif content_type == 'application/json': post_data = self.rfile.read(content_length) data = json.loads(post_data.decode('utf-8')) self.save_excel(data) self.send_response(200) self.end_headers() def process_excel(self, file_data): workbook = openpyxl.load_workbook(io.BytesIO(file_data)) sheet = workbook.active data = [] for row in sheet.iter_rows(values_only=True): data.append(list(row)) df = pd.DataFrame(data[1:], columns=data[0]) return df.to_json(orient='records') def save_excel(self, data): df = pd.DataFrame(data) with pd.ExcelWriter('output.xlsx') as writer: df.to_excel(writer, index=False) def run_server(): server = http.server.HTTPServer(('0.0.0.0', PORT), ExcelHandler) print(f"Server running on port {PORT}") server.serve_forever() if __name__ == '__main__': run_server()