2021-09-15【python】openpyxl复制插入多行数据

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

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


你可能感兴趣的:(python)