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

2022-06-01 08:51:26 浏览数 (1)

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()

0 人点赞