excel
3
总安装量
3
周安装量
#55304
全站排名
安装命令
npx skills add https://github.com/tsaol/awesome-claude --skill excel
Agent 安装分布
antigravity
3
gemini-cli
3
opencode
2
cursor
2
trae
1
Skill 文档
Excel è¡¨æ ¼å¤çæè½
æ¦è¿°
æ¬æè½æä¾å®æ´ç Excel è¡¨æ ¼å¤çè½åï¼å æ¬å建ãç¼è¾ãæ°æ®åæåå ¬å¼è®¡ç®ã
å ³é®åå
使ç¨å ¬å¼èé硬ç¼ç å¼
å§ç»ä½¿ç¨ Excel å ¬å¼ï¼è䏿¯å¨ Python ä¸è®¡ç®å硬ç¼ç ç»æã è¿ç¡®ä¿è¡¨æ ¼ä¿æå¨æå坿´æ°ã
â éè¯¯ç¤ºä¾ – 硬ç¼ç 计ç®å¼ï¼
# é误ï¼å¨ Python ä¸è®¡ç®å硬ç¼ç
total = df['Sales'].sum()
sheet['B10'] = total # 硬ç¼ç 5000
growth = (df.iloc[-1]['Revenue'] - df.iloc[0]['Revenue']) / df.iloc[0]['Revenue']
sheet['C5'] = growth # 硬ç¼ç 0.15
â æ£ç¡®ç¤ºä¾ – ä½¿ç¨ Excel å ¬å¼ï¼
# æ£ç¡®ï¼ä½¿ç¨ Excel å
¬å¼
sheet['B10'] = '=SUM(B2:B9)'
sheet['C5'] = '=(C4-C2)/C2'
sheet['D20'] = '=AVERAGE(D2:D19)'
åè½ç¹æ§
1. æ°æ®åæï¼ä½¿ç¨ 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() # ç»è®¡ä¿¡æ¯
# æ°æ®æä½
filtered = df[df['Sales'] > 1000]
grouped = df.groupby('Category')['Sales'].sum()
# åå
¥ Excel
df.to_excel('output.xlsx', index=False)
2. åå»ºæ° Excel æä»¶ï¼ä½¿ç¨ openpyxlï¼
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment
wb = Workbook()
sheet = wb.active
sheet.title = "é宿°æ®"
# æ·»å æ°æ®
sheet['A1'] = '产å'
sheet['B1'] = 'éå®é¢'
sheet.append(['产åA', 1000])
sheet.append(['产åB', 1500])
sheet.append(['产åC', 2000])
# æ·»å å
¬å¼
sheet['B5'] = 'æ»è®¡'
sheet['B6'] = '=SUM(B2:B4)'
# æ ¼å¼å
sheet['A1'].font = Font(bold=True, size=14)
sheet['A1'].fill = PatternFill(start_color='FFFF00', fill_type='solid')
sheet['A1'].alignment = Alignment(horizontal='center')
# 设置å宽
sheet.column_dimensions['A'].width = 15
sheet.column_dimensions['B'].width = 12
wb.save('sales.xlsx')
3. ç¼è¾ç°æ Excel æä»¶
from openpyxl import load_workbook
# å è½½æä»¶
wb = load_workbook('existing.xlsx')
sheet = wb.active # æ wb['å·¥ä½è¡¨åç§°']
# è¯»åæ°æ®
value = sheet['A1'].value
print(f"åå
æ ¼ A1 çå¼: {value}")
# ä¿®æ¹æ°æ®
sheet['A1'] = 'æ°å¼'
# æå
¥/å é¤è¡å
sheet.insert_rows(2) # å¨ç¬¬ 2 è¡æå
¥
sheet.delete_cols(3) # å é¤ç¬¬ 3 å
# 访é®å¤ä¸ªå·¥ä½è¡¨
for sheet_name in wb.sheetnames:
sheet = wb[sheet_name]
print(f"å·¥ä½è¡¨: {sheet_name}")
# å建æ°å·¥ä½è¡¨
new_sheet = wb.create_sheet('æ°å·¥ä½è¡¨')
new_sheet['A1'] = 'æ°æ®'
wb.save('modified.xlsx')
4. 常ç¨å ¬å¼
from openpyxl import Workbook
wb = Workbook()
sheet = wb.active
# åºç¡æ°å¦å
¬å¼
sheet['A10'] = '=SUM(A1:A9)' # æ±å
sheet['B10'] = '=AVERAGE(B1:B9)' # å¹³åå¼
sheet['C10'] = '=MAX(C1:C9)' # æå¤§å¼
sheet['D10'] = '=MIN(D1:D9)' # æå°å¼
sheet['E10'] = '=COUNT(E1:E9)' # 计æ°
# æ¡ä»¶å
¬å¼
sheet['F2'] = '=IF(A2>100,"é«","ä½")' # IF æ¡ä»¶
sheet['G2'] = '=SUMIF(A:A,">100",B:B)' # æ¡ä»¶æ±å
sheet['H2'] = '=COUNTIF(A:A,">100")' # æ¡ä»¶è®¡æ°
# æ¥æ¾å
¬å¼
sheet['I2'] = '=VLOOKUP(A2,A:B,2,FALSE)' # åç´æ¥æ¾
# ææ¬å
¬å¼
sheet['J2'] = '=CONCATENATE(A2," ",B2)' # è¿æ¥ææ¬
sheet['K2'] = '=LEFT(A2,5)' # å·¦åå符
# æ¥æå
¬å¼
sheet['L2'] = '=TODAY()' # ä»å¤©æ¥æ
sheet['M2'] = '=YEAR(A2)' # æå年份
wb.save('formulas.xlsx')
5. æ°æ®æ ¼å¼å
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from openpyxl.styles.numbers import FORMAT_CURRENCY_USD, FORMAT_PERCENTAGE
wb = Workbook()
sheet = wb.active
# å使 ·å¼
sheet['A1'].font = Font(
name='Arial',
size=14,
bold=True,
italic=False,
color='FF0000' # 红è²
)
# èæ¯å¡«å
sheet['A1'].fill = PatternFill(
start_color='FFFF00', # é»è²
fill_type='solid'
)
# 坹齿¹å¼
sheet['A1'].alignment = Alignment(
horizontal='center', # æ°´å¹³å±
ä¸
vertical='center' # åç´å±
ä¸
)
# è¾¹æ¡
thin_border = Border(
left=Side(style='thin'),
right=Side(style='thin'),
top=Side(style='thin'),
bottom=Side(style='thin')
)
sheet['A1'].border = thin_border
# æ°åæ ¼å¼
sheet['B1'] = 1234.56
sheet['B1'].number_format = FORMAT_CURRENCY_USD # è´§å¸æ ¼å¼
sheet['C1'] = 0.85
sheet['C1'].number_format = FORMAT_PERCENTAGE # ç¾åæ¯æ ¼å¼
sheet['D1'] = 1234.5678
sheet['D1'].number_format = '#,##0.00' # èªå®ä¹æ°åæ ¼å¼
wb.save('formatted.xlsx')
6. å建å¾è¡¨
from openpyxl import Workbook
from openpyxl.chart import BarChart, LineChart, PieChart, Reference
wb = Workbook()
sheet = wb.active
# å夿°æ®
sheet['A1'] = 'æä»½'
sheet['B1'] = 'éå®é¢'
data = [
['1æ', 100],
['2æ', 120],
['3æ', 150],
['4æ', 180]
]
for row in data:
sheet.append(row)
# å建æ±ç¶å¾
chart = BarChart()
chart.title = "æåº¦éå®é¢"
chart.x_axis.title = "æä»½"
chart.y_axis.title = "éå®é¢"
# æ°æ®èå´
data_ref = Reference(sheet, min_col=2, min_row=1, max_row=5)
cats_ref = Reference(sheet, min_col=1, min_row=2, max_row=5)
chart.add_data(data_ref, titles_from_data=True)
chart.set_categories(cats_ref)
# æ·»å å¾è¡¨å°å·¥ä½è¡¨
sheet.add_chart(chart, "D2")
wb.save('chart.xlsx')
7. æ°æ®éè§è¡¨åæ
import pandas as pd
# è¯»åæ°æ®
df = pd.read_excel('sales_data.xlsx')
# åå»ºæ°æ®éè§è¡¨
pivot = pd.pivot_table(
df,
values='éå®é¢',
index='产å',
columns='æä»½',
aggfunc='sum',
fill_value=0
)
# æ·»å å计è¡åå
pivot['æ»è®¡'] = pivot.sum(axis=1)
pivot.loc['æ»è®¡'] = pivot.sum()
# ä¿åå°æ°æä»¶
with pd.ExcelWriter('pivot_table.xlsx') as writer:
pivot.to_excel(writer, sheet_name='æ°æ®éè§è¡¨')
8. å¤å·¥ä½è¡¨æä½
from openpyxl import Workbook
wb = Workbook()
# å建å¤ä¸ªå·¥ä½è¡¨
sheet1 = wb.active
sheet1.title = "é宿°æ®"
sheet1['A1'] = 'éå®é¢'
sheet1['A2'] = 1000
sheet2 = wb.create_sheet("ææ¬æ°æ®")
sheet2['A1'] = 'ææ¬'
sheet2['A2'] = 600
sheet3 = wb.create_sheet("婿¶¦åæ")
sheet3['A1'] = '婿¶¦'
# 跨工ä½è¡¨å¼ç¨å
¬å¼
sheet3['A2'] = "=é宿°æ®!A2-ææ¬æ°æ®!A2"
wb.save('multi_sheet.xlsx')
è´¢å¡æ¨¡åé¢è²è§è
åå»ºè´¢å¡æ¨¡åæ¶çè¡ä¸æ åé¢è²çº¦å®ï¼
from openpyxl.styles import Font
# èè²ææ¬ - 硬ç¼ç è¾å
¥å¼
cell.font = Font(color='0000FF') # RGB: 0,0,255
# é»è²ææ¬ - å
¬å¼å计ç®
cell.font = Font(color='000000') # RGB: 0,0,0
# ç»¿è²ææ¬ - åä¸å·¥ä½ç°¿å
ç龿¥
cell.font = Font(color='008000') # RGB: 0,128,0
# çº¢è²ææ¬ - å¤é¨æä»¶é¾æ¥
cell.font = Font(color='FF0000') # RGB: 255,0,0
# é»è²èæ¯ - éè¦æ³¨æçå
³é®å设
cell.fill = PatternFill(start_color='FFFF00', fill_type='solid')
æ°åæ ¼å¼æ å
# è´§å¸æ ¼å¼ï¼ä½¿ç¨ $#,##0ï¼
sheet['A1'].number_format = '$#,##0'
# ç¾åæ¯æ ¼å¼ï¼ä¸ä½å°æ°ï¼
sheet['B1'].number_format = '0.0%'
# å°é¶æ¾ç¤ºä¸ºæ¨ªçº¿
sheet['C1'].number_format = '$#,##0;($#,##0);-'
# åæ°æ ¼å¼ï¼å¦å¸ççï¼
sheet['D1'].number_format = '0.0"x"'
# è´æ°ä½¿ç¨æ¬å·
sheet['E1'].number_format = '#,##0;(#,##0)'
工使µç¨
- éæ©å·¥å ·ï¼pandas ç¨äºæ°æ®åæï¼openpyxl ç¨äºå ¬å¼åæ ¼å¼å
- å建/å è½½ï¼å建æ°å·¥ä½ç°¿æå è½½ç°ææä»¶
- ä¿®æ¹ï¼æ·»å /ç¼è¾æ°æ®ãå ¬å¼åæ ¼å¼
- ä¿åï¼åå ¥æä»¶
- éªè¯ï¼æ£æ¥å ¬å¼æ¯å¦æ£ç¡®ï¼æ²¡æé误ï¼#REF!ã#DIV/0! çï¼
常è§å ¬å¼é误
- #REF! – æ æçåå æ ¼å¼ç¨
- #DIV/0! – é¤ä»¥é¶
- #VALUE! – å ¬å¼ä¸æ°æ®ç±»åé误
- #NAME? – æ æ³è¯å«çå ¬å¼åç§°
- #N/A – å¼ä¸å¯ç¨
ä¾èµå®è£
# å®è£
pandasï¼æ°æ®åæï¼
pip install pandas openpyxl
# 读å Excel éè¦
pip install xlrd # ç¨äºæ§ç .xls æ ¼å¼
å¿«éåè
| ä»»å¡ | pandas | openpyxl |
|---|---|---|
| è¯»åæ°æ® | pd.read_excel() |
load_workbook() |
| å建工ä½ç°¿ | – | Workbook() |
| åå ¥æ°æ® | df.to_excel() |
sheet['A1'] = value |
| æ·»å å ¬å¼ | – | sheet['A1'] = '=SUM(B:B)' |
| æ ¼å¼å | – | cell.font/fill/alignment |
| æ°æ®åæ | â | – |
| å¤ææ ¼å¼ | – | â |
æä½³å®è·µ
- 使ç¨å ¬å¼ï¼å§ç»ä½¿ç¨ Excel å ¬å¼èé硬ç¼ç 计ç®å¼
- åå æ ¼ç´¢å¼ï¼openpyxl ä½¿ç¨ 1 ç´¢å¼ï¼row=1, column=1 æ¯ A1ï¼
- 大æä»¶å¤çï¼ä½¿ç¨
read_only=Trueæwrite_only=True - æ°æ®ç±»åï¼æå®æ°æ®ç±»åé¿å æ¨æé®é¢
- ä¿ååéªè¯ï¼æ£æ¥å ¬å¼åæ°æ®å®æ´æ§
宿´ç¤ºä¾ï¼é宿¥è¡¨
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment
from openpyxl.chart import BarChart, Reference
def create_sales_report():
wb = Workbook()
sheet = wb.active
sheet.title = "é宿¥è¡¨"
# 表头
headers = ['产å', 'Q1', 'Q2', 'Q3', 'Q4', 'æ»è®¡']
sheet.append(headers)
# æ°æ®
products = [
['产åA', 1000, 1200, 1400, 1600],
['产åB', 800, 900, 1100, 1300],
['产åC', 1500, 1600, 1800, 2000]
]
for product in products:
sheet.append(product)
# æ·»å æ»è®¡å
¬å¼
for row in range(2, 5):
sheet[f'F{row}'] = f'=SUM(B{row}:E{row})'
# å£åº¦æ»è®¡
sheet['A5'] = 'å£åº¦æ»è®¡'
for col in ['B', 'C', 'D', 'E', 'F']:
sheet[f'{col}5'] = f'=SUM({col}2:{col}4)'
# æ ¼å¼å表头
for cell in sheet[1]:
cell.font = Font(bold=True, color='FFFFFF')
cell.fill = PatternFill(start_color='4472C4', fill_type='solid')
cell.alignment = Alignment(horizontal='center')
# æ ¼å¼åæ°å
for row in range(2, 6):
for col in ['B', 'C', 'D', 'E', 'F']:
sheet[f'{col}{row}'].number_format = '#,##0'
# å建å¾è¡¨
chart = BarChart()
chart.title = "å£åº¦éå®è¶å¿"
chart.x_axis.title = "产å"
chart.y_axis.title = "éå®é¢"
data_ref = Reference(sheet, min_col=2, min_row=1, max_col=5, max_row=4)
cats_ref = Reference(sheet, min_col=1, min_row=2, max_row=4)
chart.add_data(data_ref, titles_from_data=True)
chart.set_categories(cats_ref)
sheet.add_chart(chart, "H2")
# ä¿å
wb.save('sales_report.xlsx')
print("é宿¥è¡¨å建æåï¼sales_report.xlsx")
if __name__ == '__main__':
create_sales_report()