python模块openpyxl
代码语言:javascript复制pip install openpyxl
使用load_workbook函数读取一个已有的excel文件。 使用Workbook的get_sheet_by_name方法获取Worksheet对象。 使用Worksheet的cell方法获取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()