1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
| import os import sys import threading import webbrowser from pathlib import Path from flask import Flask, send_from_directory, jsonify, request
BASE_DIR = Path(getattr(sys, "_MEIPASS", Path(__file__).parent)) WEB_DIR = BASE_DIR / "web"
from backend.api_impl import API
api = API()
app = Flask(__name__, static_folder=str(WEB_DIR), static_url_path="")
@app.route("/") def index(): return send_from_directory(str(WEB_DIR), "index.html")
@app.get("/api/ping") def ping(): return jsonify({"ok": True})
@app.post("/api/set_root") def set_root(): data = request.get_json(force=True) root = data.get("root", "") ok, msg = api.set_root(root) return jsonify({"ok": ok, "msg": msg, "root": api.root})
@app.get("/api/scan") def scan(): files = api.scan_excels() return jsonify({"ok": True, "files": files, "root": api.root})
@app.post("/api/open_in_excel") def open_in_excel(): data = request.get_json(force=True) path = data.get("path", "") ok, msg = api.open_in_excel(path) return jsonify({"ok": ok, "msg": msg})
@app.post("/api/get_sheets") def get_sheets(): data = request.get_json(force=True) path = data.get("path", "") ok, sheets, msg = api.get_sheets(path) return jsonify({"ok": ok, "sheets": sheets, "msg": msg})
@app.post("/api/read_used_range") def read_used_range(): data = request.get_json(force=True) path = data.get("path", "") sheet = data.get("sheet", "") ok, payload, msg = api.read_used_range(path, sheet) return jsonify({"ok": ok, "data": payload, "msg": msg})
@app.post("/api/update_cell") def update_cell(): data = request.get_json(force=True) path = data.get("path", "") sheet = data.get("sheet", "") row = int(data.get("row")) col = int(data.get("col")) value = data.get("value", None) ok, msg = api.update_cell(path, sheet, row, col, value) return jsonify({"ok": ok, "msg": msg})
@app.post("/api/insert_row_copy") def insert_row_copy(): data = request.get_json(force=True) path = data.get("path", "") sheet = data.get("sheet", "") row = int(data.get("row")) where = data.get("where", "above") ok, msg = api.insert_row_copy(path, sheet, row, where) return jsonify({"ok": ok, "msg": msg})
@app.post("/api/delete_row") def delete_row(): data = request.get_json(force=True) path = data.get("path", "") sheet = data.get("sheet", "") row = int(data.get("row")) ok, msg = api.delete_row(path, sheet, row) return jsonify({"ok": ok, "msg": msg})
@app.post("/api/save_workbook") def save_workbook(): data = request.get_json(force=True) path = data.get("path", "") ok, msg = api.save_workbook(path) return jsonify({"ok": ok, "msg": msg})
@app.post("/api/search_all") def search_all(): data = request.get_json(force=True) keyword = data.get("keyword", "").strip() deep = bool(data.get("deep", False)) results = api.search_all(keyword, deep=deep) return jsonify({"ok": True, "results": results})
def open_browser(): url = "http://127.0.0.1:5173" try: webbrowser.open(url) except Exception: pass
if __name__ == "__main__": threading.Timer(1.0, open_browser).start() app.run(host="127.0.0.1", port=5173, debug=False)
|