夜雨聆风学习资料网

ARTICLE · 1352689

第一次用 Python处理Excel?那就从打开和读取数据开始吧

第一次用 Python处理Excel?那就从打开和读取数据开始吧

每个月月底,多少人对着 Excel 熬夜:十几个分公司的表要合并、几百行数据要逐个核对、改一个数字要拖半天滚动条。Excel 强在"看"和"算",弱在"自动化"——鼠标再快,也是一下一下点出来的。

Python 正好补上这块短板:

  • 快:一万行数据,代码三秒读完,手点要十分钟;
  • 稳:不会像人一样看串行、复制漏行;
  • 能连招:读完直接算平均值、筛数据、存文件,一条龙。

如果你用过VBA,接下来的内容会让你频频点头——Python 操作 Excel 的套路和 VBA 几乎一一对应:打开工作簿、选中工作表、读写单元格,概念完全一样,只是语法更清爽:不用 Dim 声明变量,不用 Set 赋值对象,一个 = 全搞定。用 VBA 写惯了的"仪式代码",在 Python 里能瘦一大半。

入场券只是一个第三方库:openpyxl。终端敲一行装好它:

pip install openpyxl

耐心等待1分钟,当看到以下提示信息表示安装成功:

一、先搞懂 Excel 的"三层结构"

把一个 Excel 文件想象成一本活页笔记本:

三层结构 VBA 和 Python 完全一致——这不是巧合,openpyxl 就是照着 Excel 对象模型设计的。所以有 VBA 基础的人学起来会特别快。


二、三步读取 Excel

准备一个成绩表成绩表.xlsx:A 列姓名,B 列分数,共 3 行数据:

第 1 步:翻开笔记本(打开工作簿)

from openpyxl import load_workbook   #从 openpyxl 库中拿出 load_workbook工具wb = load_workbook(r"D:\报表\成绩表.xlsx")        # wb = workbook,整本表

同一个动作在VBA中写法:

Dim wb As WorkbookSet wb = Workbooks.Open("D:\报表\成绩表.xlsx")

Python 一行顶两行——Dim 声明、Set 赋值全省了。

第 2 步:翻到某一页(选工作表)

ws = wb.active                           # 当前打开的那一页# 或者按页签名精确选择:# ws = wb["Sheet1"]print(wb.sheetnames)                     # 看看本子共有哪几页# ['Sheet1', 'Sheet2']

VBA 里是 Set ws = wb.Worksheets("Sheet1")——连"按名字选页"这个操作都一脉相承,只差一个 Set。

第 3 步:读格子(取单元格的值)

print(ws["A2"].value)                    # 第 2 行 A 列 → 林鑫print(ws.cell(row=3, column=2).value)    # 第 3 行 B 列 → 69

对照 VBA,几乎是同一个模子刻的:

Debug.Print ws.Range("A2").Value        ' 林鑫Debug.Print ws.Cells(3, 2).Value        ' 69(注意:先行后列)

三处细节两门语言完全一致:

  • "A2" 这种写法都是"列字母+行号",和 Excel 界面上看到的坐标一毛一样;

  • cell(row=3, column=2) 和 Cells(3, 2) 都是先行后列,参数顺序别搞反;

  • 行列号都从 1 开始——注意这和 Python 列表从 0 开始是两套体系。

    进阶一点:把整列读出来

    for row in ws.iter_rows(min_row=2, values_only=True):   # 从第 2 行开始逐行读    name, score = row    print(f"{name}:{score}分")

    执行后结果:

    VBA 里同样的活要配合计数器:

    Dim i As LongFor i = 2 To ws.UsedRange.Rows.Count    Debug.Print ws.Cells(i, 1).ValueNext i

    差别在哪?VBA 得自己数"一共多少行"、自己维护下标 i;Python 的 iter_rows 直接把每一行喂给你,for 循环拿到一条处理一条——这就是"迭代器"的便利,上一章学过的 for 循环在这里原样复用。


    三、完整对照表:VBA ↔ Python

    一眼就能看出来:动作一一对应,Python 普遍更短。但真正拉开差距的不是写法,而是运行环境:

    • VBA 寄生在 Excel 里——必须开着 Excel,处理几百个文件就得开关几百次;
    • Python 独立运行——不开 Excel 也能读表,批量处理上千个文件只是一层 for 循环的事。

    四、注意事项

    ⚠️ 1. .xls 老格式不认

    openpyxl 只认 .xlsx(2007 之后的版本)。遇到 .xls 要么转格式,要么装对应引擎(xlrd 1.2.0 或 calamine)后再交给 pandas。VBA 则两种都能开——这是 Python 这边的小短板。

    ⚠️ 2. 文件路径要对

    load_workbook("成绩表.xlsx") 找的是当前运行目录下的文件。文件在别处就写全路径,如 r"D:\报表\成绩表.xlsx"。找不到文件会报 FileNotFoundError,第一反应先查路径。

    ⚠️ 3. 文件正开着?读不了

    Excel 程序正打开着这个文件时,Python 读取可能报 PermissionError——先把 Excel 关掉再跑代码。(VBA 反而没这问题,因为它就在 Excel 里面。)

    ⚠️ 4. 行列号从 1 开始——留神两套体系

    cell(row=1, column=1) 才是第一个格子 A1,这和 VBA 的 Cells(1, 1) 一致,但和Python 列表从 0 开始是两套体系。写代码时脑子里要切换频道,最容易在这里栽跟头。


    五、扩展一句:还有个"重量级选手"

    等你处理的数据更复杂(筛选、求和、透视),可以认识一下 pandas 库——读 Excel 只要一行:

    import pandas as pddf = pd.read_excel("成绩表.xlsx")

    它把表格直接变成"数据框"对象,统计分析一行搞定。不过对初学者,先把 openpyxl 的"翻本子、找格子"玩熟,底层逻辑通了,pandas 上手就是水到渠成。


    小结

    一句话心法:Excel 是三层的——工作簿、工作表、单元格,VBA 和 Python 都是按这个顺序"翻页找字"。会 VBA 的人,把这些操作换个语法照搬就行;不会也没关系,这个模型本身就是最直观的 Excel 说明书。下一站:写入与合并,让 Python 不只是"看表",还能"造表"。

    回首页,搜索你想要的文档

    在首页搜索框输入关键词,快速定位资料

    文库首页搜索指引 立即搜索

    相关学习资料