1、配置
- window10系统
- python3.6
2、安装模块:
pip install openpyxl
3、读写:
注意点1:
写入日期时,要转换成字符串写入,不然打开日期的单元格会显示成乱码
注意点2:
如果保存为的excel表格存在,并且你电脑打开了,会报错:
PermissionError: [Errno 13] Permission denied: 'sample.xlsx'
3、demo代码:
参考官方修改的:
https://pypi.org/project/openpyxl/
import datetime
from openpyxl import Workbook
wb = Workbook()
# grab the active worksheet
ws = wb.active
# Data can be assigned directly to cells
ws['A1'] = 42
# Rows can also be appended
ws.append([1, 2, 3])
# Python types will automatically be converted
data = datetime.datetime.today()
print("data1",data,type(data))
data,time1 = str(data).split(' ')
# 注意我这里是转换成字符串写入,如果不转换,写入的excel是乱码,可以自己试试。
ws['A2'] = data
print(data)
# Save the file
wb.save("sample.xlsx")
4、读取一个Excel表格的所有工作表下的所有行
敏感人脸-明星人脸list0709.xlsx文件
具体解释我放到代码里面了,这里不过多解释了
from openpyxl import load_workbook
wb = load_workbook("敏感人脸-明星人脸list0709.xlsx")
print(wb.sheetnames)
# 读取所有工作表的名字
sheetnames = wb.sheetnames
for name in sheetnames:
# 通过工作表的名字获取工作表wb.get_sheet_by_name(name) 等价于 wb[name]
# sheet = wb.get_sheet_by_name(name)
sheet = wb[name]
# 获取最大行数
print(sheet.max_row)
# 打印所有的属性
print(dir(sheet))
# 读取一个工作表的所有行
rows = sheet.iter_rows()
print(rows, type(rows))
# 遍历所有行
for one in rows:
print(one)
print(dir(one))
# 遍历所有行的所有列
for cell in one:
# 打印每一行下所有列的值
print(cell.value)
break
5、合并一个Excel表格下所有工作表(或者合并多个Excel表格也可以参考这个方法)
提示下,我这里只是做个测试,这个方法可以合并,实际情况下可以根据需要进行相关修改就可以了。(比如,如果不需要每行就写入每个工作表的第一行,可以在写入时进行判断,如果列表等于第一行,不写入就行了,嘴和一个整表格插入一行就ok了,其他参考这个方法也可以到达数据去脏合并)
直接上带代码吧:
from openpyxl import load_workbook, Workbook
# 实例化准备写入的文件
hebing_wb = Workbook()
# 激活 worksheet
hebing_ws = hebing_wb.active
wb = load_workbook("敏感人脸-明星人脸list0709.xlsx")
print(wb.sheetnames)
# 读取所有工作表的名字
sheetnames = wb.sheetnames
for name in sheetnames:
# 通过工作表的名字获取工作表wb.get_sheet_by_name(name) 等价于 wb[name]
# sheet = wb.get_sheet_by_name(name)
sheet = wb[name]
# 获取最大行数
print(sheet.max_row)
max_row = sheet.max_row
# 打印所有的属性
print(dir(sheet))
# 读取一个工作表的所有行
rows = sheet.iter_rows()
print(rows, type(rows))
# 遍历所有行
for one in rows:
one_row = []
for cell in one:
one_row.append(cell.value)
hebing_ws.append(one_row)
# 保存合并的表格
hebing_wb.save('hebing.xlsx')
合并后效果展示:
6、读取一个Excel表格下所有工作表的所有列
直接上代码了,解释看代码备注就懂了
from openpyxl import load_workbook
wb = load_workbook("敏感人脸-明星人脸list0709.xlsx")
print(wb.sheetnames)
# 读取所有工作表的名字
sheetnames = wb.sheetnames
for name in sheetnames:
# 通过工作表的名字获取工作表wb.get_sheet_by_name(name) 等价于 wb[name]
# sheet = wb.get_sheet_by_name(name)
sheet = wb[name]
# 获取最大行数
print(sheet.max_row)
# 打印所有的属性
print(dir(sheet))
# 读取一个工作表的所有列
columns = sheet.iter_cols()
print(columns, type(columns))
# 遍历所有列
for one in columns:
print(one)
# print(dir(one))
# 遍历所有列的单元格
for cell in one:
# 打印每一列下所有单元格的值
print(cell.value)
break
7、指定列合并Excel表格下所有的工作表(或者合并多个Excel)
直接上我的代码:
from openpyxl import load_workbook,Workbook
# 实例化准备写入的文件
hebing_wb = Workbook()
# 激活 worksheet
hebing_ws = hebing_wb.active
wb = load_workbook("敏感人脸-明星人脸list0709.xlsx")
print(wb.sheetnames)
# 读取所有工作表的名字
sheetnames = wb.sheetnames
for name in sheetnames:
# 通过工作表的名字获取工作表wb.get_sheet_by_name(name) 等价于 wb[name]
# sheet = wb.get_sheet_by_name(name)
sheet = wb[name]
# 获取最大行数
print(sheet.max_row)
# 打印所有的属性
print(dir(sheet))
# 读取一个工作表的所有列
columns = sheet.iter_cols()
print(columns, type(columns))
# 遍历所有列
for one in columns:
print(one)
# print(dir(one))
# 遍历所有列的单元格
print(one[0].value)
if one[0].value == '姓名':
# print("是姓名列")
for cell in one:
# 打印每一列下所有单元格的值
# print("是姓名列cell",cell.value)
value = cell.value
if value != '姓名':
print("value2",value)
# 把每一个工作表的姓名写入新的Excel表格
hebing_ws.append([value])
# break
# 保存合并的表格
hebing_wb.save('hebing2.xlsx')
效果图:
合并后:
当然这个效果,如果数量很少没有必要用代码合并,但是如果这种需要合并的表格很多,每个表格又有很多行,代码操作就会很快了,优势就体现出来了。
参考:
https://blog.csdn.net/weixin_43094965/article/details/82226263
https://blog.csdn.net/longshenlmj/article/details/51706010