从一个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)