赞
踩
openpyxl is a Python library to read/write Excel 2010 xlsx/xlsm/xltx/xltm files.
It was born from lack of existing library to read/write natively from Python the Office Open XML format.
All kudos to the PHPExcel team as openpyxl was initially based on PHPExcel.
这是一个第三方库,可以处理xlsx格式的Excel文件。pip install openpyxl安装。或者在官网直接下载源码进行安装。注意该模块支持的excel文件版本,如果是老版本文件可以使用其他的模块,或者将文件转换成新版本。
另注:本次操作环境都是在Windows Server 2012 系统下进行的,所有命令都使用了绝对路径,如果是在linux环境下执行的话,由于有环境变量所以不用绝对路径也可以执行。
使用python版本:3.7
pip安装直接使用对应版本的pip进行安装即可,pip install openpyxl 安装即可。比较简单这里不再赘述。
pip 卸载:
python 官网直接下载对应的源码安装包,不过源码安装时,首次安装是会存在报错的,需要先安装依赖,也是使用源码安装就可以了。
源码下载地址:
https://pypi.org/project/openpyxl/#files
下载软件到本地,解压到当前目录,进入目录中可看到setup.py文件:
使用 python setup.py install 进行安装,
另注:本次操作环境都是在Windows Server 2012 系统下进行的,所有命令都使用了绝对路径,如果是在linux环境下执行的话,由于有环境变量所以不用绝对路径也可以执行。
由于之前安装过所以已经安装了相关依赖,所以本次源码安装直接成功:
如果安装失败的话,检查是否有安装依赖,依赖包是:et_xmlfile 、jdcal
源码安装方式和上面操作是一样的。
官网下载链接:
https://pypi.org/project/jdcal/
https://pypi.org/project/et_xmlfile/
其他软件也可以参照此方法
注:其他Python模块也都可以参照该方法。
直接上代码:
import openpyxl
import datetime
# 实例化对象excel对象
excel_obj = openpyxl.Workbook()
# excel 内当前活跃的sheet工作表
excel_obj_sheet = excel_obj.active
# 给单元格赋值
excel_obj_sheet['A1'] = 4
excel_obj_sheet.append([1, 2, 3])
excel_obj_sheet['A3'] = datetime.datetime.now()
# 文件保存
excel_obj.save('sample.xlsx')
运行后,文件内容:
由于模块和python都在不断更新,往往在新版本中会抛弃一些老版本的方法:
#coding=utf-8 import openpyxl from openpyxl import Workbook # 默认可读写,若有需要可以指定write_only和read_only为True # 新建Excel表格 wb = Workbook('new_excel.xlsx') # 加载本地已有文件 wb2 = openpyxl.load_workbook('excel.xlsx') # 获取所有sheet的名称 # 老版openpyxl支持方法,新版建议直接使用属性sheetnames # print(wb.get_sheet_names()) # print(wb2.get_sheet_names()) print('sheetnames') print(wb.sheetnames) print(wb2.sheetnames) # 根据sheet名字获得sheet # 老版办法,建议使用新版本方法 # a_sheet = wb2.get_sheet_by_name('Sheet1') a_sheet = wb2['Sheet1'] # 获取sheet的标题 print(a_sheet.title) # 获取当前显示的sheet页,两种方式都可以 sheet = wb2.active # sheet = wb2.get_active_sheet # 获取单元格 a4 = sheet['A4'] print('(%s,%s) is %s.' % (a4.column, a4.row, a4.value)) # 获得最大列和最大行 print('获得最大列和最大行') print(sheet.max_column) print(sheet.max_row) # 获取行和列 # sheet.rows为生成器, 里面是每一行的数据,每一行又由一个tuple包裹。 # sheet.columns类似,不过里面是每个tuple是每一列的单元格。 # 因为按行,所以返回A1, B1, C1这样的顺序 for row in sheet.rows: for cell in row: print('(%s,%s) is %s.' % (cell.column, cell.row, cell.value)) print('================') # A1, A2, A3这样的顺序 for column in sheet.columns: for cell in column: print('(%s,%s) is %s.' % (cell.column, cell.row, cell.value)) # 上面的代码就可以获得所有单元格的数据。如果要获得某行的数据呢?给其一个索引就行了,因为sheet.rows是生成器类型,不能使用索引,转换成list之后再使用索引,list(sheet.rows)[2]这样就获取到第三行的tuple对象。 print('================') for cell in list(sheet.rows)[2]: print('(%s,%s) is %s.' % (cell.column, cell.row, cell.value)) # 如何获得任意区间的单元格? # # 可以使用range函数,下面的写法,获得了以A1为左上角,B3为右下角矩形区域的所有单元格。注意range从1开始的,因为在openpyxl中为了和Excel中的表达方式一致,并不和编程语言的习惯以0表示第一个值。 for i in range(1, 4): for j in range(1, 3): print(sheet.cell(row=i, column=j)) # 还可以像使用切片那样使用。sheet['A1':'B3'] # 返回一个tuple,该元组内部还是元组,由每行的单元格构成一个元组。 for row_cell in sheet['A1':'B3']: for cell in row_cell: print(cell) for cell in sheet['A1':'B3']: print(cell) # 根据字母获得列号,根据列号返回字母 # 需要导入, 这两个函数存在于openpyxl.utils from openpyxl.utils import get_column_letter, column_index_from_string # 根据列的数字返回字母 print(get_column_letter(2)) # B # 根据字母返回列的数字 print(column_index_from_string('D')) # 4
本代码的执行结果就不贴出来,由于太多了,大家可以自己找几个文件随便进行测试。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。