xlsx
npx skills add https://github.com/leastbit/claude_skills_zh-cn --skill xlsx
Agent 安装分布
Skill 文档
è¾åºè¦æ±
ææ Excel æä»¶
é¶å ¬å¼é误
- æ¯ä¸ª Excel 模åäº¤ä»æ¶å¿ é¡»ä¿è¯é¶å ¬å¼é误ï¼#REF!ã#DIV/0!ã#VALUE!ã#N/Aã#NAME?ï¼
ä¿çç°ææ¨¡æ¿ï¼æ´æ°æ¨¡æ¿æ¶ï¼
- ä¿®æ¹æä»¶æ¶ä»ç»ç 究并精确å¹é ç°æçæ ¼å¼ãæ ·å¼å约å®
- åå¿å°æ ååæ ¼å¼å¼ºå äºå·²ææ¢å®æ¨¡å¼çæä»¶
- ç°ææ¨¡æ¿çº¦å®å§ç»ä¼å äºè¿äºæå
è´¢å¡æ¨¡å
é¢è²ç¼ç æ å
é¤éç¨æ·æç°ææ¨¡æ¿å¦æè¯´æ
è¡ä¸æ åé¢è²çº¦å®
- èè²ææ¬ï¼RGB: 0,0,255ï¼ï¼ç¡¬ç¼ç è¾å ¥ï¼ä»¥åç¨æ·å°ä¸ºä¸åæ æ¯æ´æ¹çæ°å
- é»è²ææ¬ï¼RGB: 0,0,0ï¼ï¼ææå ¬å¼å计ç®
- ç»¿è²ææ¬ï¼RGB: 0,128,0ï¼ï¼ä»åä¸å·¥ä½ç°¿å å ¶ä»å·¥ä½è¡¨æåç龿¥
- çº¢è²ææ¬ï¼RGB: 255,0,0ï¼ï¼æåå ¶ä»æä»¶çå¤é¨é¾æ¥
- é»è²èæ¯ï¼RGB: 255,255,0ï¼ï¼éè¦å ³æ³¨çå ³é®å设æéè¦æ´æ°çåå æ ¼
æ°åæ ¼å¼æ å
å¿ éçæ ¼å¼è§å
- å¹´ä»½ï¼æ ¼å¼åä¸ºææ¬å符串ï¼ä¾å¦ï¼”2024″ èé “2,024”ï¼
- è´§å¸ï¼ä½¿ç¨ $#,##0 æ ¼å¼ï¼å§ç»å¨æ é¢ä¸æå®åä½ï¼”Revenue ($mm)”ï¼
- é¶å¼ï¼ä½¿ç¨æ°åæ ¼å¼ä½¿ææé¶æ¾ç¤ºä¸º “-“ï¼å æ¬ç¾åæ¯ï¼ä¾å¦ï¼”$#,##0;($#,##0);-“ï¼
- ç¾åæ¯ï¼é»è®¤ä½¿ç¨ 0.0% æ ¼å¼ï¼ä¸ä½å°æ°ï¼
- åæ°ï¼ä¼°å¼åæ°ï¼EV/EBITDAãP/Eï¼æ ¼å¼å为 0.0x
- è´æ°ï¼ä½¿ç¨æ¬å· (123) èéåå· -123
å ¬å¼æå»ºè§å
å设æ¾ç½®
- å°ææå设ï¼å¢é¿çã婿¶¦çãåæ°çï¼æ¾å¨åç¬çå设åå æ ¼ä¸
- å¨å ¬å¼ä¸ä½¿ç¨åå æ ¼å¼ç¨èé硬ç¼ç å¼
- 示ä¾ï¼ä½¿ç¨ =B5*(1+$B$6) èé =B5*1.05
å ¬å¼é误é¢é²
- éªè¯ææåå æ ¼å¼ç¨æ¯å¦æ£ç¡®
- æ£æ¥èå´ä¸çå·®ä¸é误
- ç¡®ä¿ææé¢æµæé´çå ¬å¼ä¸è´
- 使ç¨è¾¹çæ 嵿µè¯ï¼é¶å¼ãè´æ°ï¼
- éªè¯æ²¡ææå¤ç循ç¯å¼ç¨
硬ç¼ç å¼çææ¡£è¦æ±
- å¨åå æ ¼æè¾¹æ·»å 注éæè¯´æï¼å¦æå¨è¡¨æ ¼æ«å°¾ï¼ãæ ¼å¼ï¼”æ¥æºï¼[ç³»ç»/ææ¡£]ï¼[æ¥æ]ï¼[å ·ä½å¼ç¨]ï¼[URLï¼å¦éç¨ï¼]”
- 示ä¾ï¼
- “æ¥æºï¼å ¬å¸ 10-Kï¼FY2024ï¼ç¬¬ 45 页ï¼è¥æ¶æ³¨éï¼[SEC EDGAR URL]”
- “æ¥æºï¼å ¬å¸ 10-Qï¼Q2 2025ï¼éä»¶ 99.1ï¼[SEC EDGAR URL]”
- “æ¥æºï¼Bloomberg ç»ç«¯ï¼8/15/2025ï¼AAPL US Equity”
- “æ¥æºï¼FactSetï¼8/20/2025ï¼ä¸è´é¢æçé”
XLSX å建ãç¼è¾ååæ
æ¦è¿°
ç¨æ·å¯è½è¦æ±æ¨å建ãç¼è¾æåæ .xlsx æä»¶çå å®¹ãæ¨æä¸åçå·¥å ·å工使µç¨å¯ç¨äºä¸åçä»»å¡ã
éè¦è¦æ±
å
¬å¼éæ°è®¡ç®éè¦ LibreOfficeï¼å¯ä»¥å设已å®è£
LibreOffice ç¨äºéè¿ recalc.py èæ¬éæ°è®¡ç®å
¬å¼å¼ãè¯¥èæ¬å¨é¦æ¬¡è¿è¡æ¶ä¼èªå¨é
ç½® LibreOffice
读åååææ°æ®
ä½¿ç¨ pandas è¿è¡æ°æ®åæ
å¯¹äºæ°æ®åæãå¯è§åååºæ¬æä½ï¼ä½¿ç¨ pandasï¼å®æä¾å¼ºå¤§çæ°æ®å¤çè½åï¼
import pandas as pd
# 读å Excel
df = pd.read_excel('file.xlsx') # é»è®¤ï¼ç¬¬ä¸ä¸ªå·¥ä½è¡¨
all_sheets = pd.read_excel('file.xlsx', sheet_name=None) # ææå·¥ä½è¡¨ä½ä¸ºåå
¸
# åæ
df.head() # é¢è§æ°æ®
df.info() # åä¿¡æ¯
df.describe() # ç»è®¡ä¿¡æ¯
# åå
¥ Excel
df.to_excel('output.xlsx', index=False)
Excel æä»¶å·¥ä½æµç¨
å ³é®ï¼ä½¿ç¨å ¬å¼ï¼èé硬ç¼ç å¼
å§ç»ä½¿ç¨ Excel å ¬å¼ï¼è䏿¯å¨ Python ä¸è®¡ç®å¼å硬ç¼ç å®ä»¬ã è¿ç¡®ä¿çµåè¡¨æ ¼ä¿æå¨æä¸å¯æ´æ°ã
â é误 – 硬ç¼ç 计ç®å¼
# é误ï¼å¨ Python ä¸è®¡ç®å¹¶ç¡¬ç¼ç ç»æ
total = df['Sales'].sum()
sheet['B10'] = total # 硬ç¼ç 5000
# é误ï¼å¨ Python ä¸è®¡ç®å¢é¿ç
growth = (df.iloc[-1]['Revenue'] - df.iloc[0]['Revenue']) / df.iloc[0]['Revenue']
sheet['C5'] = growth # 硬ç¼ç 0.15
# é误ï¼Python 计ç®å¹³åå¼
avg = sum(values) / len(values)
sheet['D20'] = avg # 硬ç¼ç 42.5
â æ£ç¡® – ä½¿ç¨ Excel å ¬å¼
# æ£ç¡®ï¼è®© Excel è®¡ç®æ»å
sheet['B10'] = '=SUM(B2:B9)'
# æ£ç¡®ï¼å¢é¿çä½ä¸º Excel å
¬å¼
sheet['C5'] = '=(C4-C2)/C2'
# æ£ç¡®ï¼ä½¿ç¨ Excel 彿°è®¡ç®å¹³åå¼
sheet['D20'] = '=AVERAGE(D2:D19)'
è¿éç¨äºææè®¡ç® – å计ãç¾åæ¯ãæ¯çãå·®å¼çãçµåè¡¨æ ¼åºè¯¥è½å¤å¨æºæ°æ®æ´æ¹æ¶éæ°è®¡ç®ã
常è§å·¥ä½æµç¨
- éæ©å·¥å ·ï¼pandas ç¨äºæ°æ®ï¼openpyxl ç¨äºå ¬å¼/æ ¼å¼
- å建/å è½½ï¼å建æ°å·¥ä½ç°¿æå è½½ç°ææä»¶
- ä¿®æ¹ï¼æ·»å /ç¼è¾æ°æ®ãå ¬å¼åæ ¼å¼
- ä¿åï¼åå ¥æä»¶
- éæ°è®¡ç®å
¬å¼ï¼ä½¿ç¨å
¬å¼æ¶å¿
é¡»æ§è¡ï¼ï¼ä½¿ç¨ recalc.py èæ¬
python recalc.py output.xlsx - éªè¯å¹¶ä¿®å¤ä»»ä½é误ï¼
- èæ¬è¿åå å«é误详æ ç JSON
- 妿
status为errors_foundï¼æ£æ¥error_summaryè·åå ·ä½é误类ååä½ç½® - ä¿®å¤å·²è¯å«çéè¯¯å¹¶åæ¬¡éæ°è®¡ç®
- 常è§éè¦ä¿®å¤çé误ï¼
#REF!ï¼æ æçåå æ ¼å¼ç¨#DIV/0!ï¼é¤ä»¥é¶#VALUE!ï¼å ¬å¼ä¸çæ°æ®ç±»åé误#NAME?ï¼æ æ³è¯å«çå ¬å¼åç§°
åå»ºæ° Excel æä»¶
# ä½¿ç¨ openpyxl å¤çå
¬å¼åæ ¼å¼
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment
wb = Workbook()
sheet = wb.active
# æ·»å æ°æ®
sheet['A1'] = 'Hello'
sheet['B1'] = 'World'
sheet.append(['Row', 'of', 'data'])
# æ·»å å
¬å¼
sheet['B2'] = '=SUM(A1:A10)'
# æ ¼å¼å
sheet['A1'].font = Font(bold=True, color='FF0000')
sheet['A1'].fill = PatternFill('solid', start_color='FFFF00')
sheet['A1'].alignment = Alignment(horizontal='center')
# å宽
sheet.column_dimensions['A'].width = 20
wb.save('output.xlsx')
ç¼è¾ç°æ Excel æä»¶
# ä½¿ç¨ openpyxl ä¿çå
¬å¼åæ ¼å¼
from openpyxl import load_workbook
# å è½½ç°ææä»¶
wb = load_workbook('existing.xlsx')
sheet = wb.active # æä½¿ç¨ wb['SheetName'] è·åç¹å®å·¥ä½è¡¨
# å¤çå¤ä¸ªå·¥ä½è¡¨
for sheet_name in wb.sheetnames:
sheet = wb[sheet_name]
print(f"å·¥ä½è¡¨: {sheet_name}")
# ä¿®æ¹åå
æ ¼
sheet['A1'] = 'New Value'
sheet.insert_rows(2) # å¨ä½ç½® 2 æå
¥è¡
sheet.delete_cols(3) # å é¤ç¬¬ 3 å
# æ·»å æ°å·¥ä½è¡¨
new_sheet = wb.create_sheet('NewSheet')
new_sheet['A1'] = 'Data'
wb.save('modified.xlsx')
éæ°è®¡ç®å ¬å¼
openpyxl å建æä¿®æ¹ç Excel æä»¶å
å«å
¬å¼å符串ä½ä¸å
å«è®¡ç®å¼ãä½¿ç¨æä¾ç recalc.py èæ¬éæ°è®¡ç®å
¬å¼ï¼
python recalc.py <excelæä»¶> [è¶
æ¶ç§æ°]
示ä¾ï¼
python recalc.py output.xlsx 30
è¯¥èæ¬ï¼
- 馿¬¡è¿è¡æ¶èªå¨è®¾ç½® LibreOffice å®
- éæ°è®¡ç®ææå·¥ä½è¡¨ä¸çææå ¬å¼
- æ«æææåå æ ¼æ¥æ¾ Excel é误ï¼#REF!ã#DIV/0! çï¼
- è¿åå å«è¯¦ç»é误ä½ç½®å计æ°ç JSON
- åæ¶éç¨äº Linux å macOS
å ¬å¼éªè¯æ¸ å
ç¡®ä¿å ¬å¼æ£å¸¸å·¥ä½çå¿«éæ£æ¥ï¼
åºæ¬éªè¯
- æµè¯ 2-3 个示ä¾å¼ç¨ï¼å¨æå»ºå®æ´æ¨¡åä¹åéªè¯å®ä»¬æ¯å¦æåæ£ç¡®çå¼
- åæ å°ï¼ç¡®è®¤ Excel åå¹é ï¼ä¾å¦ï¼ç¬¬ 64 å = BLï¼èé BKï¼
- è¡åç§»ï¼è®°ä½ Excel è¡ä» 1 å¼å§ç´¢å¼ï¼DataFrame 第 5 è¡ = Excel 第 6 è¡ï¼
常è§é·é±
- NaN å¤çï¼ä½¿ç¨
pd.notna()æ£æ¥ç©ºå¼ - æå³ä¾§çåï¼è´¢å¹´æ°æ®é常å¨ç¬¬ 50+ å
- å¤ä¸ªå¹é ï¼æç´¢ææåºç°ï¼èä¸ä» ä» æ¯ç¬¬ä¸ä¸ª
- é¤ä»¥é¶ï¼å¨å
¬å¼ä¸ä½¿ç¨
/ä¹åæ£æ¥åæ¯ï¼#DIV/0!ï¼ - é误å¼ç¨ï¼éªè¯ææåå æ ¼å¼ç¨æå颿çåå æ ¼ï¼#REF!ï¼
- 跨工ä½è¡¨å¼ç¨ï¼ä½¿ç¨æ£ç¡®çæ ¼å¼ï¼Sheet1!A1ï¼é¾æ¥å·¥ä½è¡¨
å ¬å¼æµè¯çç¥
- ä»å°å¤å¼å§ï¼å¨å¹¿æ³åºç¨ä¹åå å¨ 2-3 个åå æ ¼ä¸æµè¯å ¬å¼
- éªè¯ä¾èµé¡¹ï¼æ£æ¥å ¬å¼ä¸å¼ç¨çææåå æ ¼æ¯å¦åå¨
- æµè¯è¾¹çæ åµï¼å æ¬é¶å¼ãè´æ°åé常大çå¼
解读 recalc.py è¾åº
èæ¬è¿åå å«é误详æ ç JSONï¼
{
"status": "success", // æ "errors_found"
"total_errors": 0, // éè¯¯æ»æ°
"total_formulas": 42, // æä»¶ä¸çå
¬å¼æ°é
"error_summary": { // ä»
å¨åç°é误æ¶åºç°
"#REF!": {
"count": 2,
"locations": ["Sheet1!B5", "Sheet1!C10"]
}
}
}
æä½³å®è·µ
åºéæ©
- pandasï¼æéåæ°æ®åæãæ¹éæä½åç®åæ°æ®å¯¼åº
- openpyxlï¼æéåå¤ææ ¼å¼ãå ¬å¼å Excel ç¹å®åè½
ä½¿ç¨ openpyxl
- åå æ ¼ç´¢å¼ä» 1 å¼å§ï¼row=1, column=1 æååå æ ¼ A1ï¼
- 使ç¨
data_only=True读å计ç®å¼ï¼load_workbook('file.xlsx', data_only=True) - è¦åï¼å¦æä½¿ç¨
data_only=Trueæå¼å¹¶ä¿åï¼å ¬å¼å°è¢«æ¿æ¢ä¸ºå¼å¹¶æ°¸ä¹ 丢失 - 对äºå¤§æä»¶ï¼è¯»åæ¶ä½¿ç¨
read_only=Trueï¼åå ¥æ¶ä½¿ç¨write_only=True - å ¬å¼ä¼è¢«ä¿çä½ä¸ä¼è¢«è®¡ç® – ä½¿ç¨ recalc.py æ´æ°å¼
ä½¿ç¨ pandas
- æå®æ°æ®ç±»å以é¿å
æ¨æé®é¢ï¼
pd.read_excel('file.xlsx', dtype={'id': str}) - 对äºå¤§æä»¶ï¼è¯»åç¹å®åï¼
pd.read_excel('file.xlsx', usecols=['A', 'C', 'E']) - æ£ç¡®å¤çæ¥æï¼
pd.read_excel('file.xlsx', parse_dates=['date_column'])
代ç 飿 ¼æå
éè¦ï¼çæç¨äº Excel æä½ç Python ä»£ç æ¶ï¼
- ç¼åç®æ´ç Python 代ç ï¼ä¸æ·»å ä¸å¿ è¦ç注é
- é¿å åé¿çåéååå¤ä½çæä½
- é¿å ä¸å¿ è¦ç print è¯å¥
å¯¹äº Excel æä»¶æ¬èº«ï¼
- 为å å«å¤æå ¬å¼æéè¦å设çåå æ ¼æ·»å 注é
- è®°å½ç¡¬ç¼ç å¼çæ°æ®æ¥æº
- ä¸ºå ³é®è®¡ç®å模åé¨åæ·»å 说æ