Install
openclaw skills install @lingyu9495-source/excel-keep-format-edit客户拿来一张老报表说「就在原表上改个数,格式一点都不要动」——用 openpyxl 重建一次,字体、边框、合并单元格、条件格式、列宽全丢,客户一打开就知道这不是他原来那张表。 正确做法:**用 Excel COM 打开原文件的副本,只改目标单元格的值,其余原样保留。** 这套 skill 解决三个真痛点: - **格式零丢失**:复制原件再改,不重建工作簿 - **别猜行号**:先扫科目名定位实际行列再改(附「资产负债表是左右双栏、科目在 E 列、数值在 G/H 列」这个反复踩的坑) - **改完保勾稽**:财务三表调整后自动校验「资产=负债+所有者权益」,不是改完就交 适用:审计调整分录、财务测算、错账更正、报表科目重分类。 环境:Windows + Office(用 pywin32 调 COM)。 触发词:Excel改数字、保格式修改、原表修改、不动格式、xls修改、财务三表、资产负债表调整、勾稽关系、审计调整。
openclaw skills install @lingyu9495-source/excel-keep-format-editopenpyxl重建xlsx会丢原表格式/样式/布局——客户一打开就看出来"不是原来的表"。 必须用 Excel COM 打开原文件copy,只改目标单元格,其余原样保留。
# pywin32 装在 hermes venv(系统python没有!)
python -m pip install pywin32
# 运行脚本也用 hermes venv 的 python(系统python import不到win32com)
import shutil
shutil.copy2(SRC, OUT) # 原件不动,改OUT
import win32com.client
excel = win32com.client.Dispatch('Excel.Application')
excel.Visible = False; excel.DisplayAlerts = False
wb = excel.Workbooks.Open(OUT)
ws = wb.Sheets('资产负债表')
# 扫A列/E列找科目名,打印实际行列
for r in range(1, 60):
a = str(ws.Cells(r, 1).Value or ''); e = str(ws.Cells(r, 5).Value or '')
if '未分配利润' in a or '未分配利润' in e:
print(r, a, e, ws.Cells(r,7).Value) # G/H列是右侧数值
⚠️ 左右双栏报表(资产负债表)科目在E列、数值在G/H列——"未分配利润"在右侧G34/H34,不是C/D! ⚠️ xlrd 0-indexed vs COM 1-indexed,行号差1——必须用label扫描确认。
ws.Cells(13, 3).Value = 4307698.97 # 其他应收款期末(左栏C)
ws.Cells(34, 7).Value = 1052736.98 # 未分配利润期末(右栏G)
wb.Application.Calculate()
wb.Save(); wb.Close(True); excel.Quit()
小企业准则导出的xls合计行常是数值不是SUM公式,改明细后合计不会自动变。 调整后必须手动算:
assert abs(ws.Cells(36,3).Value - ws.Cells(36,7).Value) < 0.01 # 资产=负债+权益
目标:未分配利润调正(如期末105万/期初79万),利润总额=期末-期初差。
期末未分配 - 期初未分配 == 累计利润总额import win32com 报No module named 'pywintypes';用venv pythonpython -I 隔离模式读不到site-packages → 直接运行不带-I九品锦锂e | 把踩过的坑封装成"拿来就能跑"的 skill,不写教科书。这个 skill 是我自己每天在用的版本。
微信:ly5419495(加时备注「SkillHub」,我优先通过) 公众号:初五Agent(微信搜一搜,复盘和方法都写在那儿,不加微信也能读)
我另外做的几个能直接跑的工具,都放在这个货架页(复制到浏览器打开): https://skillpay.alipay.com/public/jiupinjinlie
用的时候卡住了、或者有别的场景想让我封装成 skill,按上面任意方式找我就行。
