您现在的位置是:网站首页> 编程资料编程资料
Python 使用openpyxl处理Excel文件详情_python_
2023-05-26
506人已围观
简介 Python 使用openpyxl处理Excel文件详情_python_
前言
安装openpyxl模块:
pip install openpyxl

导入模块:
import openpyxl
官方文档:
1. Excel窗口
- 工作簿(workbook):Excel的文件
- 工作表(worksheet):一个工作簿由多个工作表组成
- 列(column):工作表的列名为A、B、C等的大写字母
- 行(row):工作表的行名称为1、2、3等的数字
- 单元格(cell):工作表中的每个格子称为单元格,用(列名,行名)表示

2. 读取Excel文件
# author:mlnt # createdate:2022/8/16 import openpyxl from openpyxl.utils import get_column_letter, column_index_from_string # 1.打开文件 # 使用openpyxl.load_workbook()方法打开Excel文件 filename = 'data.xlsx' work_book = openpyxl.load_workbook(filename=filename) # 加载Excel文件 # 2.获取工作表名称 """ - Excel文件对象.sheetnames:获取工作簿文件的所有工作表,以列表数据类型返回 - Excel文件对象.active:获取当前工作表的名称 """ # 获取所有工作表的名称 work_sheets = work_book.sheetnames print(f'工作表列表:{work_sheets}') # 工作表列表:['Sheet1', 'Sheet2', 'Sheet3'] # 获取当前工作表的名称 current_sheet = work_book.active print(f'当前工作表:{current_sheet}') # 当前工作表: # 获取当前工作表的内容 title = current_sheet.title print(f'当前工作表标题:{title}') # 当前工作表标题:Sheet1 # 3.切换工作表 work_sheet = work_book['Sheet2'] # 返回名称相应的工作表 print(f'当前工作表:{work_sheet.title}') # 当前工作表:Sheet2 work_sheet = work_book['Sheet1'] # 返回名称相应的工作表 print(f'当前工作表:{work_sheet.title}') # 当前工作表:Sheet1 # 4.获取工作表的内容 print(f'单元格A1: {work_sheet["A1"].value}') print(f'单元格B1: {work_sheet["B1"].value}') print(f'单元格C1: {work_sheet["C1"].value}') print(f'单元格D1: {work_sheet["D1"].value}') print(f'单元格E1: {work_sheet["E1"].value}') print(f'单元格F1: {work_sheet["F1"].value}') # 单元格A1: 姓名 # 单元格B1: 字 # 单元格C1: 号 # 单元格D1: 所处时代 # 单元格E1: 别称 # 单元格F1: 代表作 # 获取单元格相对位置信息 # column:列,row:行,coordinate:坐标 print(f'单元格A1: {work_sheet["A1"].column}, {work_sheet["A1"].row}, {work_sheet["A1"].coordinate}') print(f'单元格B1: {work_sheet["B1"].column}, {work_sheet["B1"].row}, {work_sheet["B1"].coordinate}') print(f'单元格C1: {work_sheet["C1"].column}, {work_sheet["C1"].row}, {work_sheet["C1"].coordinate}') print(f'单元格D1: {work_sheet["D1"].column}, {work_sheet["D1"].row}, {work_sheet["D1"].coordinate}') print(f'单元格E1: {work_sheet["E1"].column}, {work_sheet["E1"].row}, {work_sheet["E1"].coordinate}') print(f'单元格F1: {work_sheet["F1"].column}, {work_sheet["F1"].row}, {work_sheet["F1"].coordinate}') # 单元格A1: 1, 1, A1 # 单元格B1: 2, 1, B1 # 单元格C1: 3, 1, C1 # 单元格D1: 4, 1, D1 # 单元格E1: 5, 1, E1 # 单元格F1: 6, 1, F1 # 5.获取工作表内容的列数和行数 print(f'工作表列数:{work_sheet.max_column}') print(f'工作表行数:{work_sheet.max_row}') # 工作表列数:6 # 工作表行数:20 # 6.获取单元格内容 # cell(column=n, row=m) for j in range(1, work_sheet.max_row + 1): for i in range(1, work_sheet.max_column + 1): print(work_sheet.cell(column=i, row=j).value, end=' ') print() # 7.工作表对象的rows和columns """ 创建工作表对象成功后,会自动产生数据产生器(generators): rows: 工作表数据产生器以行方式包裹,每一行用一个Tuple包裹; columns:工作表数据产生器以列方式包裹,每一列用一个Tuple包裹。 """ print(type(work_sheet.rows)) # print(type(work_sheet.columns)) # for cell in list(work_sheet.columns)[0]: print(cell.value) for cell in list(work_sheet.rows)[1]: print(cell.value, end=' ') # 逐行遍历 print('逐行遍历开始...') for row in work_sheet.rows: for cell in row: print(cell.value, end=' ') print() print('逐行遍历结束...') # 逐列遍历 print('逐列遍历开始...') for column in work_sheet.columns: for cell in column: print(cell.value, end=' ') print() print('逐列遍历结束...') # 8.用整数取代域名 """ get_column_letter(数值):将数值转成字母 column_index_from_string(字母):将字母转成数值 """ print(f'列数:{get_column_letter(work_sheet.max_column)}') print(f"3 --> {get_column_letter(3)}") print(f"26 --> {get_column_letter(26)}") print(f"39 --> {get_column_letter(39)}") print(f"46 --> {get_column_letter(46)}") print(f"120 --> {get_column_letter(120)}") # 列数:F # 3 --> C # 26 --> Z # 39 --> AM # 46 --> AT # 120 --> DP print(f"A --> {column_index_from_string('A')}") print(f"F --> {column_index_from_string('F')}") print(f"AB --> {column_index_from_string('AB')}") print(f"BBC --> {column_index_from_string('BBC')}") print(f"CNN --> {column_index_from_string('CNN')}") # A --> 1 # F --> 6 # AB --> 28 # BBC --> 1407 # CNN --> 2406 # 9.切片 # 使用切片的概念读取某区间数据 # 逐行读取 for row in work_sheet['A3':'F4']: for cell in row: print(cell.value, end=' ') print() # 白居易 乐天 香山居士 唐朝 诗魔、诗王 《长恨歌》、《卖炭翁》、《琵琶行》 # 杜甫 子美 少陵野老 唐朝 诗圣 《春望》、《茅屋为秋风所破歌》、《登高》、《望岳》 data.xlsx:

3. 写入Excel文件
import openpyxl # 1.创建空白工作簿 work_book = openpyxl.Workbook() # 2.保存Excel文件 work_book.save('new_workbook.xlsx')4. 复制Excel文件
import openpyxl filename = 'data.xlsx' work_book = openpyxl.load_workbook(filename=filename) # 开启工作簿 backup_name = filename[:filename.find('.xlsx')] + '-backup.xlsx' work_book.save(backup_name)效果:

5. 创建工作表
# author:mlnt # createdate:2022/8/16 import openpyxl # 1.创建空白工作簿 work_book = openpyxl.Workbook() print(f'工作表列表:{work_book.sheetnames}') # 工作表列表:['Sheet'] # 2.创建新的工作表 work_book.create_sheet() print(f'工作表列表:{work_book.sheetnames}') # 工作表列表:['Sheet', 'Sheet1'] work_sheet = work_book.active # 获取当前工作表 print(f'当前工作表:{work_sheet.title}') # 当前工作表:Sheet """ 在创建工作表时,预设的工作表名称为”SheetN“,N为数字编号,以递增方式显示; 新建的工作表放在工作表列的最右边。 可以通过在create_sheet()中添加参数title和index设置新工作表的名称及位置(工作表位置从0开始) """ work_book.create_sheet(index=0, title='工作表1') work_book.create_sheet(index=2, title='工作表3') print(f'工作表列表:{work_book.sheetnames}') # 工作表列表:['工作表1', 'Sheet', '工作表3', 'Sheet1'] # 3.删除工作表 # 删除”工作表3“ work_book.remove(work_book['工作表3']) print(f'工作表列表:{work_book.sheetnames}') # 工作表列表:['工作表1', 'Sheet', 'Sheet1'] # 删除”Sheet“ del work_book['Sheet'] print(f'工作表列表:{work_book.sheetnames}') # 工作表列表:['工作表1', 'Sheet1'] # 4.写入单元格 work_sheet = work_book.active # 获取当前工作表 print(f'当前工作表:{work_sheet.title}') # 当前工作表:Sheet rows = [ ['姓名', '年龄', '联系方式', '学历'], ['张三', '18', '18888886666', '大专'], ['王二狗', '28', '18888888888', '研究生'], ['苟恭芝', '38', '18888889999', '博士'], ['李华', '20', '18888887777', '本科'], ['曹亠强', '18', '18888883333', '大专'] ] for row in rows: work_sheet.append(row) # 保存Excel文件 work_book.save('my_workbook.xlsx') 
6. 设置单元格字体及颜色
# author:mlnt # createdate:2022/8/16 import openpyxl from openpyxl.styles import Font wb = openpyxl.Workbook() # 创建空白工作簿 ws = wb.active # 获得当前工作表 """ bold:加粗,值为True时表示粗体 italic:斜体,值为True时设置斜体 strike:删除线,值为True时设置删除线 name:字体名称,如:Arial size:字号 color:字体颜色,color='FFFFFF' """ fontTitle1 = Font(name='微软雅黑', size=24) ws['A1'].font = fontTitle1 ws['A1'] = '勿谓言之不预' fontTitle2 = Font(name='楷体', size=18, bold=True) ws['A2'].font = fontTitle2 ws['A2'] = '山不在高,有仙则名' # 设置字体及颜色 # RGB颜色对照表:https://www.917118.com/tool/color_3.html fontTitle3 = Font(name='Arial', size=20, italic=True, color='00FF7F') ws['A3'].font = fontTitle3 ws['A3'] = 'The early bird catches the worm.' # 保存Excel文件 wb.save('设置单元格字体.xlsx')效果:

7. 数学公式的使用
常用的数学公式:
- SUM():总和,如:SUM(A1:A3)
- AVERAGE():平均值,如:AVERAGE(A1:A3)
- MAX():最大值,如:MAX(A1:A3)
- MIN():最小值,如:MIN(A1:A3)
import openpyxl wb = openpyxl.Workbook() # 创建空白工作簿 ws = wb.active # 获得当前工作表 rows = [ ['学号', '姓名', '语文', '数学', '英语', '物理', '化学', '生物', '总分'], ['1001', '张三', 90, 98, 106, 80, 85, 78, '=SUM(C2:H2)'], ['1002', 'Tom', 93, 100, 96, 84, 75, 68, '=SUM(C3:H3)'], ['1003', 'Jack', 89, 80, 108, 70, 65, 88, '=SUM(C4:H4)'], ['1004', 'Mary', 110, 88, 88, 68, 68, 64, '=SUM(C5:H5)'], ['1005', 'Jane', 98, 78, 86, 56, 95, 72, '=SUM(C6:H6)'] ] for row in rows: # 将数据添加到工作表 ws.append(row) ws['B7'] = '总分' ws['C7'] = '=SUM(C2:C6)' ws['D7'] = '=SUM(D2:D6)' ws['E7'] = '=SUM(E2:E6)' ws['F7'] = '=SUM(F2:F6)' ws['G7'] = '=SUM(G2:G6)' ws['H7'] = '=SUM(H2:H6)' ws['B8'] = '平均分' ws['C8'] = '=AVERAGE(C2:C6)' ws['D8'] = '=AVERAGE(D2:D6)' ws['E8'] = '=AVE
相关内容
- Python线性表种的单链表详解_python_
- Python函数进阶与文件操作详情_python_
- Python教程之类型转换详解_python_
- Python lambda 匿名函数优点和局限性深度总结_python_
- 详解python-opencv 常用函数_python_
- pytorch和tensorflow计算Flops和params的详细过程_python_
- Python中 whl包、tar.gz包的区别详解_python_
- windows中python实现自动化部署_python_
- Python 变量教程之打包和解包参数_python_
- Python 数据分析教程探索性数据分析_python_
点击排行
本栏推荐
