前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python Linux自动化运维 -- Openpyxl Excel处理

Python Linux自动化运维 -- Openpyxl Excel处理

作者头像
用户3013098
发布2022-06-01 08:51:26
1.9K0
发布2022-06-01 08:51:26
举报

python模块openpyxl

代码语言:javascript
复制
pip install openpyxl

使用load_workbook函数读取一个已有的excel文件。 使用Workbookget_sheet_by_name方法获取Worksheet对象。 使用Worksheetcell方法获取Cell对象。

Workbook

Workbook对应Excel工作簿

Workbook对象的部分属性:
  • active:获取活跃的Worksheet;
  • read_only:是否以read_only模式打开excel文件;
  • encoding:文件的字符集编码;
  • properties:文档的元数据,如标题,创建者,创建日期等;
  • worksheets:以列表的形式返回所有的Worksheet;
Workbook对象常用方法:
  • get_sheet_names:获取所有表格的名称;
  • get_sheet_by_name:通过表格名称获取Worksheet对象;
  • get_active_sheet:获取活跃的表格;
  • remove_sheet:删除一个表格;
  • create_sheet:创建一个空的表格;
  • copy_worksheet:在Workbook内拷贝表格。
Worksheet

Worksheet对应Excel表格

Worksheet部分属性:
  • title:表格的标题;
  • dimensions:表格的大小,这里的大小是指含有数据的表格大小。例如,对于example.xlsx文件,dimensions属性的值为'A1:E11';;
  • max_row:表格的最大行;
  • min_row:表格的最小行;
  • max_column:表格的最大列;
  • min_column:表格的最小列;
  • rows:按行获取单元格(Cell对象);
  • columns:按列获取单元格(Cell对象);
  • freeze_panes:冻结窗格;
  • values:按行获取表格的内容(数据)。
Worksheet的常用方法:
  • iter_rows:按行获取所有单元格(Cell对象);
  • iter_columns:按列获取所有的单元格;
  • append:在表格末尾添加数据;
  • merged_cells:合并多个单元格;
  • unmerge_cells:移除合并的单元格。
Cell

Cell对应Excel单元格

Cell的部分属性:
  • row:单元格所在的行;
  • column:单元格所在的列;
  • value:单元格的取值;
  • cordinate:单元格的坐标;

案例1

计算平均分与总分,并保存到表格的右侧中
代码语言:javascript
复制
#!/usr/bin/env python
#coding: utf-8
# xiayun
import openpyxl

def process_worksheet(sheet):
    #设定avg_colum(平均分列),sum_column(总分列)为最后1,2行
    avg_colum = sheet.max_column + 1
    sum_column = sheet.max_column + 2

    #指定第二行,第三列开始遍历,按行返回row单元格
    for row in sheet.iter_rows(min_row=2, min_col=3):
        #获取当前行单元格的分数值列表
        scores = [cell.value for cell in row]
        #计算总分
        sum_score = sum(scores)
        #计算平均分
        avg_score = sum_score / len(scores)
        #将平均分与总分赋予单元格
        sheet.cell(row=row[0].row, column=avg_colum).value = avg_score
        sheet.cell(row=row[0].row, column=sum_column).value = sum_score
    #赋予平均分与总分的第一行标题
    sheet.cell(row=1, column=avg_colum).value = 'avg'
    sheet.cell(row=1, column=sum_column).value = 'sum'

def main():
    #打开表格
    wb = openpyxl.load_workbook('example.xlsx')
    #获取工作簿
    sheet = wb.get_sheet_by_name('student')
    #运行方法
    process_worksheet(sheet)
    #保存表格
    wb.save('example_1.xlsx')

if __name__ == '__main__':
    main()

案例二

合并多个Excel文档到一个Excel文档
代码语言:javascript
复制
#!/usr/bin/env python
#coding: utf-8
# xiayun
import os
import glob

import openpyxl

def get_all_xlsx_files(path):
    #获取所有xlsx结尾的文件
    xlsx_files = glob.glob(os.path.join(path, '*.xlsx'))
    #按文件小写排序
    sorted(xlsx_files, key=str.lower)
    return xlsx_files

def merge_xlsx_files(xlsx_files):
    #打开第一个文件表格
    wb = openpyxl.load_workbook(xlsx_files[0])
    ws = wb.active
    #新增表格标题
    ws.title = "merged result"

    #依次遍历其余文件表格
    for filename in xlsx_files[1:]:
        workbook = openpyxl.load_workbook(filename)
        sheet = workbook.active
        #去除首行标题
        for row in sheet.iter_rows(min_row=2):
            values = [cell.value for cell in row]
            #单元格内容加入新增表格中
            ws.append(values)

    return wb

def main():
    #获取所有当前程序文件所在目录的除'~lmx'之外的其余'*.xlsx'文件
    xlsx_files = get_all_xlsx_files(os.path.expanduser('~lmx'))
    #合并
    wb = merge_xlsx_files(xlsx_files)
    #保存结果
    wb.save('merged_form.xlsx')

if __name__ == '__main__':
    main()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 devops运维先行者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • python模块openpyxl
      • 案例1
      • 案例二
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档