美文网首页呆鸟译PyPython中文社区呆鸟的Python数据分析
如何用 Python 快速设置 Excel 表格边框

如何用 Python 快速设置 Excel 表格边框

作者: 呆鸟的简书 | 来源:发表于2019-11-25 12:12 被阅读0次

    Pandas 百问百答第 001 篇。

    本篇是呆鸟原创系列Pandas 百问百答的第一篇,本系列的特点如下:

    1. 目标受众: Python 数据分析小白、从 Excel 处理数据转向用 Pandas 处理数据的新手
    2. 为什么要出个系列:目的很简单,就是为了解决新手小白在用 Pandas 处理数据时的实际问题
    3. 特点: 每次只解决一两个实际问题,碰到什么问题,就写什么问题
    4. 建议:内容不多,一定要上手实际试一下,呆鸟会给大家提供用到的 ipynb 文件与数据文件。
    5. 欢迎反馈:呆鸟的公号没有留言功能,也没有公号群,不过可以通过文章末尾的点击原文链接进入简书文章,给呆鸟留言,另外,推荐大家加严小样儿的微信号,严小样儿是位非常热心专业的群主,呆鸟也在他的群里厮混,有什么问题,可以在群里交流,除了呆鸟,还可以与很多数据分析大咖交流、学习。
    严小样儿的微信

    呆鸟云:本篇虽然是 Pandas 百问百答系列的开篇,但其实用的并不是 Pandas,而是 xlwings,但讲的是如何处理 Pandas 输出的 Excel 文件,为啥呢? 因为,很多数据分析结果的用户,比如,部门领导、业务人员他们不会用 Python、Jupyter、Pandas,除非你有 BI 系统,否则大部分人都是看 Excel 的,但 Pandas 的 to_excel 函数输出的 xlsx 文件是不带格式的。

    给领导或同事看 Excel,总不能一点格式都不设置吧,这也有点太 low 了,呆鸟就习惯把字体设为微软雅黑、字号设为 10,根据内容自适应列宽、短的文字列设置为居中,数字设置成带千分号的,当然还有百分比和日期格式也要设置,但本篇介绍的是如何快速设置边框。

    这里特别要说一下,别小看这个技巧,呆鸟可是研究了好久才解决,openpyxl、xlwings、xlsxwriter,这几个支持库呆鸟找了一溜够也没找到快速设置边框的方法,之前只好用 for 循环,速度超级慢,让人没法接受,不过好在通过一番研究找到了这个快速设置边框的方式,现在分享给大家,当然,如果有朋友有更好的方式,或者也有类似的方式,还请不吝赐教,至于联系方式,简书也可以,去严小样儿的群里也可以。

    文归正传,下面就来看下这个功能是怎么实现的。假设这是一家叫小蜜蜂的超市,这家超市刚刚开业,只有苹果、梨、葡萄这三样产品,领导想看下销售情况,直接用 Pandas 输出是 Excel 这样的:

    大家可以看到,这个表有几个问题:

    1. 边框不完整,只有部分单元格有边框
    2. 字体不美观,宋体不如微软雅黑看着好看
    3. 列宽不合适,有的列过宽,有的列窄了,比如日期列,都看不见日期了
    4. 居中未设置,比如产品列该居中,但居左了。

    如果不经常处理格式也就罢了,但如果一天几十上百个表,还手动调整就很头疼了,今天就给大家解决第一个问题,快速设置 Excel 文件边框

    1. 安装 xlwings

    直接安装用 pip install xlwings,用 anaconda 的,已经内置了,见下图。

    1. 导入 xlwings
    import xlwings as xw
    
    1. 打开 Excel 文件
    # 打开存好的 Excel
    app = xw.App() # 设置应用
    wb = xw.Book('data/小蜜蜂超市销售报表.xlsx') # 打开文件
    ws = wb.sheets['Sheet1']  # 选择表格
    

    注意:要养成良好的习惯,数据文件与程序文件要分开存储,一般数据文件存储在 data 子目录里。

    1. 获取表格行列
    last_column = ws.range(1, 1).end('right').get_address(0, 0)[0] # 获取最后一列
    last_row = ws.range(1, 1).end('down').row # 获取最后一行
    
    a_range = f'A1:{last_column}{last_row}'  # 生成表格的数据范围 
    

    这里 a_range 输出的范围是 A1:D6,即数据表的整个内容。

    1. 设置 a_range,也就是 A1:D6 的表格边框
    # 设置边框
    ws.range(a_range).api.Borders(8).LineStyle = 1  # 上边框
    ws.range(a_range).api.Borders(9).LineStyle = 1  # 下边框
    ws.range(a_range).api.Borders(7).LineStyle = 1  # 左边框
    ws.range(a_range).api.Borders(10).LineStyle = 1  # 右边框
    ws.range(a_range).api.Borders(12).LineStyle = 1  # 内横边框
    ws.range(a_range).api.Borders(11).LineStyle = 1  # 内纵边框
    

    说明:

    Borders() 里的参数,详见下表。

    边框位置 说明
    xlEdgeTop 8 上边框
    xlEdgeBottom 9 下边框
    xlEdgeLeft 7 左边框
    xlEdgeRight 10 右边框
    xlInsideHorizontal 12 内横边框
    xlInsideVertical 11 内纵边框

    LineStyle = 1,这里的 1 指的是边框为实线。

    边框样式 说明
    Transparent 0 透明
    Solid 1 实线
    Dashes 2 虚线
    Double solid 8 双实线

    看看下图,是不是已经有边框了。

    到这里还不算完,还要关闭 Excel,保存 xlsx 文件。

    # 保存并关闭 Excel
    wb.save('data/小蜜蜂超市销售报表.xlsx')
    wb.close()
    app.quit()
    

    到此,设置边框的操作就完成了,完整的 ipynb 文件,请找严小样儿加群后找我要。

    其它的操作,下期再介绍。

    建议大家安装 anaconda,呆鸟文章示例都是用 anaconda 内置的 Jupyter NoteBook 编写与分享的,有了 Jupyter,学起来方便。

    还有每次分享的内容不多,大家一定要上手试试,只是看代码,不敲代码,永远也学不会的。

    Pandas 上手实战系列

    相关文章

      网友评论

        本文标题:如何用 Python 快速设置 Excel 表格边框

        本文链接:https://www.haomeiwen.com/subject/ehrdwctx.html