作者:Irain
QQ:2573396010
微信:18802080892
资料链接:https://openpyxl.readthedocs.io/en/stable/tutorial.html#playing-with-data
1 访问一个单元
现在我们知道了如何获取工作表,可以开始修改单元格内容了。单元格可以直接作为工作表的键进行访问,且传递变量的修改作用发挥在原单元格:
v = ws['B1']
v.value
v.value = 'g'
ws['B1'].value
这将返回A4处的单元格,如果尚未存在则创建一个单元格。可以直接分配值:
ws['A1']=1
ws['A1'].value
Worksheet.cell()方法可以使用行和列表示法访问单元格:
d = ws.cell(row=4, column=2, value=10)
d.value
在内存中创建工作表时,它不包含任何单元格。它们是在首次访问时创建的。
2 访问多个单元
可以使用切片访问单元格范围:
cut1 = ws['A1:B3']
cut1
行或列的范围可以类似地获得:
colC = ws['A']
col_range = ws['A:B']
row10 = ws[1]
row_range = ws[1:2]
您也可以使用以下Worksheet.iter_rows()方法:
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
for cell in row:
print(cell)
同样,该Worksheet.iter_cols()方法将返回列:
for col in ws.iter_cols(min_row=1, max_col=3, max_row=2):
for cell in col:
print(cell)
出于性能原因,该Worksheet.iter_cols()方法在只读模式下不可用。
如果需要遍历文件的所有行或列,则可以使用以下 Worksheet.rows属性:
或Worksheet.columns属性:
出于性能原因,该Worksheet.columns属性在只读模式下不可用。
3 仅值
如果只需要工作表中的值,则可以使用该Worksheet.values属性。这会遍历工作表中的所有行,但仅返回单元格值:
for row in ws.values:
for value in row:
print(value)
双方Worksheet.iter_rows()并Worksheet.iter_cols()可以采取的values_only参数,只返回单元格的值:
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2, values_only=True):
print(row)
4 数据存储
一旦有了Cell,我们可以为其分配一个值:
c = ws['A1']
c.value = 'hello, world'
print(c.value)
4.1 保存到文件
保存工作簿的最简单,最安全的方法是使用对象的 Workbook.save()方法Workbook:
wb.save('balances.xlsx')
此操作将覆盖现有文件,而不会发出警告。
文件名扩展名不是强制为xlsx或xlsm,尽管如果不使用正式扩展名,则可能会直接在其他应用程序中打开它,因此可能会遇到一些麻烦。
由于OOXML文件基本上是ZIP文件,因此您也可以使用自己喜欢的ZIP存档管理器将其打开。
5 从文件加载
与书写相同,您可以使用openpyxl.load_workbook()打开现有的工作簿: