python利用openpyxl读写Excel
2019-08-16 本文已影响41人
yiming1012
文章作者:易明
个人博客:https://yiming1012.github.io
简书主页:https://www.jianshu.com/u/6ebea55f5cec
邮箱地址:1129079384@qq.com
简介
最近的数据分析工作需要将数据插入到给定格式的Excel文件(.xlsx)中。通过调研发现:
- xlrd/xlwt对文件的读写速度较快,对于
微软的office
,只能保存为xls文件,不能为xlsx文件,而金山的WPS Office
既可保存为xls,也可保存为xlsx。由于我用的是WPS,不存在不能对xlsx文件操作的问题。
# -*- coding: utf-8 -*-
import xlrd
from xlutils.copy import copy
#filename
filename = 'a.xlsx'# 文件名
rb = xlrd.open_workbook(filename, formatting_info=True)
# formatting_info=True: 保留原数据格式
wb = copy(rb) # 复制页面
ws = wb.get_sheet(0) # 取第一个sheet
# ----- 按(row, col, str)写入需要写的内容 -------
for i in range(10):
ws.write(3, i, i)
# ----- 按(row, col, str)写入需要写的内容 -------
wb.save(filename)
- pandas中的ExcelWriter可以将整个dataframe写入到Excel,但是Excel文件格式会发生变化。
# -*- coding: utf-8 -*-
import pandas as pd
#DataFrame
df1 = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]}, columns=['a', 'b'])
df2 = pd.DataFrame({'a': [7, 8, 9], 'b': [6, 5, 4]}, columns=['a', 'b'])
#指定Excel
writer = pd.ExcelWriter('aaa.xlsx')
df1.to_excel(writer, sheet_name='sheet1', index=False)
df2.to_excel(writer, sheet_name='sheet2', index=False)
#保存
writer.save()
- openpyxl模块可以对原始文件进行操作,只是读写速度偏慢。本次工作中采用openpyxl模块实现功能。
from openpyxl import load_workbook
#导入Excel文件
wb = load_workbook('a.xlsx')
#激活工作表
#ws = wb.active #这个可以注释掉
#获取sheet
ws =wb['Sheet1']
#插入数据
ws['A1'] = 234
ws.cell(row=1, column=3).value = 123
#遍历数据
for row in ws.values:
for cell in row:
print(cell)
for row in ws.iter_rows(min_row=2, max_col=2, max_row=3):
for cell in row:
print(cell.value)
#保存到文件
wb.save("a.xlsx")
openpyxl模块
参照官网文档:https://openpyxl.readthedocs.io/en/stable/tutorial.html
- 如果没有安装openpyxl模块,可以通过pip安装
pip install openpyxl
- 导入Workbook
from openpyxl import Workbook,load_workbook
- 如果表不存在,则创建Workbook;存在则导入:
wb = Workbook() #表不存在,创建
wb = load_workbook('test.xlsx')#表存在,导入
- 创建和使用sheet
ws1 = wb.create_sheet("Mysheet") # 默认在最后新建sheet
ws2 = wb.create_sheet("Mysheet", 0) # 在第一个新建sheet
ws3 = wb['Sheet1']# 如果表里面存在sheet,则可使用该sheet
- 向单元格插入数据
ws['A1'] = 234 #通过worksheet的key
ws.cell(row=1, column=3).value = 123 #通过行列确定一个cell
- 遍历表文件
#遍历所有数据
for row in ws.values:
for cell in row:
print(cell)
#遍历指定范围数据
for row in ws.iter_rows(min_row=2, max_col=2, max_row=3):
for cell in row:
print(cell.value)
- 保存文件
wb.save('name.xlsx') #可取不同文件名
总结
以上为简单的学习总结,希望能帮助到有需要的朋友,通过总结自己也获得了成长。代码Demo请参考
:https://github.com/yiming1012/coding