由于最近打算编写一个小的Excel程序, 于是在想使用哪一种语言与Excel进行交互. 过去, 主要使用了Excel里自带的VBA语言, 例如<BYSPT: 使用标准贯入试验估算土体的物理力学参数值>, 在那段时间里, 也使用VBA编写了桩设计, 排桩支护等工作使用的Excel程序. 近年来Python的呼声日益高涨, 许多用户要求微软的Excel嵌入Python语言. 不过, 在目前的Excel中还没有实现这一功能.
后来, 在处理超过10万条的电影数据时, 使用了Pandas与Excel进行交互操作. 同时也安装过openpyxl, 这台机器上次安装的版本是2.5.3, 大约是在2018年左右. 如今两年多过去了, openpyxl已经发展到3.0.7, 于是首先把openpyxl更新到最新版本, 如下图所示.
这个笔记没有逻辑地试验了openpyxl的一些功能, 将来有可能把它嵌入到FLAC3D, UDEC等软件中处理一些数据, 例如地震记录, SPT或CPT的测量数据.
2 输入类
在本实验中, 仅输入了两个类: Workbook和Font, Workbook用来实例化对象wb, ws让这个对象激活, 如下所示.
from openpyxl import Workbook
from openpyxl.styles import Font
wb = Workbook()
ws = wb.active
3 直接赋值到cell
openpyxl可以直接把值赋值到cell中, 可以赋值字符串,也可以输入数值. 例如:
ws['A1'] = '公路桥涵结构设计'
ws['B1'] = 24
此外, 也可以把当前时间赋值到cell中. 例如:
import datetime
ws['C1'] = datetime.datetime.now()
4 批量赋值多个cell
openpyxl使用append方法可以输入多个cell, 例如:
ws.append([1, 2, 3, 4])把这四个值分别赋值到A1,A2,A3,A4中.
一个更万能的方法是使用数组赋值, 例如:
rows_count = (
(14, 27),
(22, 30),
(42, 92),
(51, 32),
(16, 60),
(63, 13)
)
在定义了这个数值后, 使用append把这些值赋值到(A1:B6)中:
for i in rows_count:
ws.append(i)
5 使用Excel公式
首先, 对一个cell的指定可以使用A1, B3这种格式外, 也可以直接使用行和列的数值来指定. 例如:
cell = ws.cell(row=7, column=3)
然后使用Excel的求和公式把上面的(A1:B6)相加,赋值到C7:
cell.value = "=SUM(A1:B6)"
6 对字体控制
因为在开始输入了Font类, 所以可以对字体进行控制,包括字型和颜色:
cell.font = Font(bold=True,color = "FF0000")
这句代码把上面的求和值改成了红色粗体.
7 改变保存路径
在默认状态下, Excel文件保存到与py文件相同的目录下, 如果想保存到不同的目录, 可以自己设置路径:
filepath = "F:/tutorial/sample.xlsx"
wb.save(filepath)
8 加载存在的Excel文件
在下面的代码中, 通过load_workbook类加载一个已经存在的Excel文件:
from openpyxl import Workbook
from openpyxl import load_workbook
wb = Workbook()
wb.save("demo.xlsx")
wb = load_workbook("demo.xlsx")