#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""把《工作表 在 生命科学-2026年三季度销售工作汇报.xlsx》三张表抽成 JSON，供 deck 第6页渲染。
数值按 Excel 自身的 number_format 显示（百分比/小数位），避免 0.436666666666667 这类原值裸奔。
用法：/usr/bin/python3 脚本/extract_q3_xlsx.py <in.xlsx> <out.json>
"""
import json, sys, openpyxl

src, out = sys.argv[1], sys.argv[2]
wb = openpyxl.load_workbook(src, data_only=True)


def fmt(v, nf):
    if v is None:
        return ''
    if isinstance(v, (int, float)):
        nf = nf or ''
        if '%' in nf:
            d = len(nf.split('.')[1].replace('%', '')) if '.' in nf else 0
            return ('%.' + str(d) + 'f%%') % (v * 100)
        f = float(v)
        if abs(f - round(f)) < 1e-9:
            return str(int(round(f)))
        d = 0
        if '.' in nf:
            d = len(nf.split('.')[1].split(';')[0])
        return ('%.' + str(max(d, 4)) + 'f') % f if d else ('%.6f' % f).rstrip('0').rstrip('.')
    return str(v).strip()


sheets = []
for ws in wb.worksheets:
    rows = []
    for r in range(1, ws.max_row + 1):
        row = []
        for c in range(1, ws.max_column + 1):
            cell = ws.cell(r, c)
            row.append(fmt(cell.value, cell.number_format))
        while row and row[-1] == '':
            row.pop()
        if any(row):
            rows.append({'r': r, 'cells': row})
    sheets.append({'name': ws.title, 'rows': rows})

json.dump(sheets, open(out, 'w', encoding='utf-8'), ensure_ascii=False)
print('✅ %s' % out)
for s in sheets:
    print('   %-24s %d 行有数据' % (s['name'], len(s['rows'])))
