【python】openpyxl复制插入多行数据

从一个excel表复制插入多行数据到另一个excel表中

其实就是把行范围内的所有单元格(包括单元格格式和内容)复制到另一个表中,其中值(value)和单元格数字格式(number_format)可以直接复制值,用等号连接即可。其他格式,例如字体格式(font)、对齐方式(alignment)、填充(fill)、边框(border)属性,需要用到深拷贝也就是copy方法。
更多单元格样式的操作可以去看官方文档:https://openpyxl.readthedocs.io/en/stable/styles.html
中文官方文档:https://openpyxl-chinese-docs.readthedocs.io/zh_CN/latest/styles.html

from copy import copy
import openpyxl as xl
'''
@Desc	  :   复制插入多行数据
@param1	:   copy_path = 要复制的文件路径 copy_sheet_name = 要复制的工作表名称 copy_rows_start = 需要复制的开始行 
			insert_path = 需要插入的文件路径 insert_sheet_name = 需要插入的工作表  insert_rows_start = 需要插入的开始行  num = 复制的行数
@return	:   None
'''

def insert_multi_row(copy_path,copy_sheet_name,copy_rows_start,insert_path,insert_sheet_name,insert_rows_start,num):
    copy_rows_start = int(copy_rows_start)
    insert_rows_start = int(insert_rows_start)
    num = int(num)
    try:
        #打开要操作的工作簿
        wb_copy = xl.load_workbook(copy_path)
        wb_insert = xl.load_workbook(insert_path)
        
        #打开对应工作表
        if copy_sheet_name == '':
            ws_copy = wb_copy.active
        else:
            ws_copy = wb_copy[copy_sheet_name]

        if insert_sheet_name == '':
            ws_insert = wb_insert.active
        else:
            ws_insert = wb_insert[insert_sheet_name]
         
    except Exception as e:
        print('工作表不存在!')
    
    # 遍历每一行,循环插入数据
    for i in range(num):
        insert_rows = insert_rows_start + i
        copy_rows = copy_rows_start + i
        ws_insert.insert_rows(insert_rows) #指定行号先插入空白行
        cols = ws_copy.max_column #获取列数


        for i in range(1,cols):
            #复制一行数据粘贴到另一行
			#单元格值及内容复制粘贴
			ws_insert.cell(insert_rows, i).value = ws_copy.cell(copy_rows, i).value
            ws_insert.cell(insert_rows, i).number_format = ws_copy.cell(copy_rows, i).number_format
            ws_insert.cell(insert_rows, i).font = copy(ws_copy.cell(copy_rows, i).font)
            ws_insert.cell(insert_rows, i).alignment = copy(ws_copy.cell(copy_rows, i).alignment)
            ws_insert.cell(insert_rows, i).fill = copy(ws_copy.cell(copy_rows, i).fill)
            ws_insert.cell(insert_rows, i).border = copy(ws_copy.cell(copy_rows, i).border)
        
        #行高调整
        ws_insert.row_dimensions[insert_rows + 1].height = ws_insert.row_dimensions[insert_rows].height
        ws_insert.row_dimensions[insert_rows].height = ws_copy.row_dimensions[copy_rows].height


    wb_insert.save(insert_path)


  • 7
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值