按照视频教程用 xlwt操作excel,结果写入数据后,excel文件无法打开,文件格式已被破坏,于是网上寻找解决方案。
原因:
2007版以前的Excel(xls结尾的),需要使用xlrd读,xlwt写。Excel 2010及其以后版本(以 xlsx/xlsm/xltx/xltm结尾),需要使用openpyxl操作读写。
检查下自己的excel版本:Python3.6/Excel 2016
于是换用openpyxl来操作excel,解决问题。
顺便看下openpyxl的官方介绍。
https://openpyxl.readthedocs.io/en/stable/index.html
https://openpyxl.readthedocs.io/en/stable/usage.html
一.安装
$ pip install openpyxl
二.使用
创建一个工作簿
from openpyxl import Workbook
wb = Workbook()
一个至少有一个sheet的工作簿已经被创建好了,可以直接通过 openpyxl.workbook.Workbook.active()属性直接使用它
ws = wb.active
读取文件
from openpyxl import load_workbook
wb2 = load_workbook(‘test.xlsx’)
print wb2.sheetnames
[‘Sheet2’, ‘New Title’, ‘Sheet1’]
用openpyxl.workbook.Workbook.create_sheet()创建新的sheet页
例:
ws1 = wb.create_sheet(“Mysheet”) # 新增放在最后(默认)
ws2 = wb.create_sheet(“Mysheet”, 0) # 新增sheet插入最前面
修改sheet的名称:
ws.title = “New Title”
根据sheet名查找sheet
ws3 = wb[“New Title”]
获取所有sheet名称
print(wb.sheetnames)
[‘Sheet2’, ‘New Title’, ‘Sheet1’]
or
for sheet in wb:
… print(sheet.title)
复制sheet
source = wb.active
target = wb.copy_worksheet(source)
获取单元格的值
c = ws[‘A4’]
单元格赋值方法一:
ws[‘A4’] = 4
单元格赋值方法二:
d = ws.cell(row=4, column=2, value=10)
获取多个单元格
cell_range = ws[‘A1’:’C2’]
按行或者按列获取单元格
colC = ws[‘C’]
col_range = ws[‘C:D’]
row10 = ws[10]
row_range = ws[5:10]
用iter_rows获取多个单元格
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
… for cell in row:
… print(cell)
用iter_cols同理
for col in ws.iter_cols(min_row=1, max_col=3, max_row=2):
… for cell in col:
… print(cell)
获取全部行
ws = wb.active
ws[‘C9’] = ‘hello world’
tuple(ws.rows)
获取全部列
tuple(ws.columns)
单元格存入数据
c.value = ‘hello, world’
print(c.value)
‘hello, world’d.value = 3.14
print(d.value)
3.14
或者
wb = Workbook(guess_types=True)
c.value = ‘12%’
print(c.value)
0.12import datetime
d.value = datetime.datetime.now()
print d.value
datetime.datetime(2010, 9, 10, 22, 25, 18)c.value = ‘31.50’
print(c.value)
31
保存文件
wb = Workbook()
wb.save(‘balances.xlsx’)