IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【Python】openpyxl 复制带格式的Excel 表格 -> 正文阅读

[Python知识库]【Python】openpyxl 复制带格式的Excel 表格

记录一下关于 python 操作 excel表

简单复制excel表

这个复制不了颜色之类的格式,但是边边框框可以带上

import copy
import openpyxl


class SplitMultiSheet:
    """复制带格式"""

    def split_sheet(self, wb: openpyxl.Workbook, sn: str):
        """
        :param wb:  excel表格
        :param sn:  sheet_name
        :return:
        """
        # _sn: sheet_name, ws: Worksheet
        for _sn, ws in zip(wb.sheetnames, wb):
            if _sn != sn:
                wb.remove(ws)
        # 保存文件、关闭文件
        wb.save(f'{sn}.xlsx')
        wb.close()

    def main(self, file_path: str):
        wb = openpyxl.load_workbook(filename=file_path)
        for sn in wb.sheetnames:
            # 深拷贝
            new_wb = copy.deepcopy(wb)
            self.split_sheet(wb=new_wb, sn=sn)


if __name__ == '__main__':
    path = 'xxx.xlsx'
    sms = SplitMultiSheet()
    sms.main(file_path=path)

格式全复制

复制全表

这段代码用于复制整个excel表。
以下这段代码引用于 python: openpyxl带格式复制excel

import copy
import openpyxl
from openpyxl.utils import get_column_letter

path = "数据.xlsx"
save_path = "数据-复制.xlsx"

wb = openpyxl.load_workbook(path)
wb2 = openpyxl.Workbook()

sheetnames = wb.sheetnames
for sheetname in sheetnames:
    print(sheetname)
    sheet = wb[sheetname]
    sheet2 = wb2.create_sheet(sheetname)

    # tab颜色
    sheet2.sheet_properties.tabColor = sheet.sheet_properties.tabColor

    # 开始处理合并单元格形式为“(<CellRange A1:A4>,),替换掉(<CellRange 和 >,)' 找到合并单元格
    wm = list(sheet.merged_cells)
    if len(wm) > 0:
        for i in range(0, len(wm)):
            cell2 = str(wm[i]).replace('(<CellRange ', '').replace('>,)', '')
            sheet2.merge_cells(cell2)

    for i, row in enumerate(sheet.iter_rows()):
        sheet2.row_dimensions[i+1].height = sheet.row_dimensions[i+1].height
        for j, cell in enumerate(row):
            sheet2.column_dimensions[get_column_letter(j+1)].width = sheet.column_dimensions[get_column_letter(j+1)].width
            sheet2.cell(row=i + 1, column=j + 1, value=cell.value)

            # 设置单元格格式
            source_cell = sheet.cell(i+1, j+1)
            target_cell = sheet2.cell(i+1, j+1)
            target_cell.fill = copy.copy(source_cell.fill)
            if source_cell.has_style:
                target_cell._style = copy.copy(source_cell._style)
                target_cell.font = copy.copy(source_cell.font)
                target_cell.border = copy.copy(source_cell.border)
                target_cell.fill = copy.copy(source_cell.fill)
                target_cell.number_format = copy.copy(source_cell.number_format)
                target_cell.protection = copy.copy(source_cell.protection)
                target_cell.alignment = copy.copy(source_cell.alignment)

if 'Sheet' in wb2.sheetnames:
    del wb2['Sheet']
wb2.save(save_path)

wb.close()
wb2.close()

print('Done.')

带格式拆分多个sheet表

这段代码用于拆分多个sheet,是带格式的拆分!

# -*- coding: utf-8 -*-
# @Time     : 2022-04-13  11:36 
# @File     : split_format_excel.py
# @software : PyCharm

"""如何复用
    1. 修改 输入、输出的文件路径,19~20行
    2. 运行即可
"""



import copy
import openpyxl
from openpyxl.utils import get_column_letter as gcl

# 指定输入、输出文件路径
input_file_path = './split_format_excel_file/xxx.xlsx'
output_file_path = './output/'


class SplitMultiSheet:
    """复制带格式"""

    def split_sheet(self, wb: openpyxl.Workbook, sn: str):
        new_wb = openpyxl.Workbook()
        print('sheet_name:', sn)
        sheet = wb[sn]
        sheet2 = new_wb.create_sheet(sn)
        # tab颜色
        sheet2.sheet_properties.tabColor = sheet.sheet_properties.tabColor

        # 开始处理合并单元格形式为“(<CellRange A1:A4>,),替换掉(<CellRange 和 >,)' 找到合并单元格
        wm = list(sheet.merged_cells)
        if len(wm) > 0:
            for i in range(0, len(wm)):
                cell2 = str(wm[i]).replace('(<CellRange ', '').replace('>,)', '')
                sheet2.merge_cells(cell2)
        #
        for i, row in enumerate(sheet.iter_rows()):
            sheet2.row_dimensions[i + 1].height = sheet.row_dimensions[i + 1].height
            for j, cell in enumerate(row):
                sheet2.column_dimensions[gcl(j + 1)].width = sheet.column_dimensions[gcl(j + 1)].width
                sheet2.cell(row=i + 1, column=j + 1, value=cell.value)

                # 设置单元格格式
                source_cell = sheet.cell(i + 1, j + 1)
                target_cell = sheet2.cell(i + 1, j + 1)
                target_cell.fill = copy.copy(source_cell.fill)
                if source_cell.has_style:
                    target_cell._style = copy.copy(source_cell._style)
                    target_cell.font = copy.copy(source_cell.font)
                    target_cell.border = copy.copy(source_cell.border)
                    target_cell.fill = copy.copy(source_cell.fill)
                    target_cell.number_format = copy.copy(source_cell.number_format)
                    target_cell.protection = copy.copy(source_cell.protection)
                    target_cell.alignment = copy.copy(source_cell.alignment)
        # 第一个 Sheet 默认为 Sheet,可以选择删除
        if 'Sheet' in new_wb.sheetnames:
            del new_wb['Sheet']
        new_wb.save(f"{output_file_path}{sn}.xlsx")
        new_wb.close()

    def main(self):
        # 打开文件
        wb = openpyxl.load_workbook(filename=input_file_path)
        # 循环读取多个sheet,并拆分
        for sn in wb.sheetnames:
            self.split_sheet(wb=wb, sn=sn)


if __name__ == '__main__':
    sms = SplitMultiSheet()
    sms.main()
    print('Done.')

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 15:42:14  更:2022-05-01 15:42:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 16:54:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码