使用openpyxl 进行excel文件读写

文章目录

1、配置

  1. window10系统
  2. python3.6

2、安装模块:

pip install openpyxl

3、读写:

注意点1:

写入日期时,要转换成字符串写入,不然打开日期的单元格会显示成乱码

注意点2:

如果保存为的excel表格存在,并且你电脑打开了,会报错:

PermissionError: [Errno 13] Permission denied: 'sample.xlsx'

使用openpyxl 进行excel文件读写

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文件
使用openpyxl 进行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))
    # 读取一个工作表的所有行
    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')

合并后效果展示:
使用openpyxl 进行excel文件读写

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')

效果图:
使用openpyxl 进行excel文件读写

合并后:
使用openpyxl 进行excel文件读写

当然这个效果,如果数量很少没有必要用代码合并,但是如果这种需要合并的表格很多,每个表格又有很多行,代码操作就会很快了,优势就体现出来了。

参考:

https://blog.csdn.net/weixin_43094965/article/details/82226263

https://blog.csdn.net/longshenlmj/article/details/51706010

https://blog.csdn.net/dongfei2033/article/details/79743067

https://pypi.org/project/openpyxl/

上一篇:python – 如何在保留图表的同时使用XLRD或openpyxl编辑Excel工作簿?


下一篇:python的excel处理之openpyxl