こちらのプログラムを改造して、値、スタイル、コラム幅もコピーするようにしました。
Openpyxl: Border のコピー
プログラム
copy_borders_value.py
#! /usr/bin/python
# ---------------------------------------------------------------
# copy_borders_value.py
#
# Aug/08/2024
# ---------------------------------------------------------------
import sys
import openpyxl
from openpyxl.styles.borders import Border, Side
from openpyxl.utils import get_column_letter
# ---------------------------------------------------------------
def copy_cell_border(row_in,col_src,col_target):
left_border = ws.cell(column=col_src, row=row_in).border.left.border_style
right_border = ws.cell(column=col_src, row=row_in).border.right.border_style
top_border = ws.cell(column=col_src, row=row_in).border.top.border_style
bottom_border = ws.cell(column=col_src, row=row_in).border.bottom.border_style
#
#
ws.cell(column=col_target, row=row_in).border = Border(left=Side(style=left_border), right=Side(style=right_border), top=Side(style=top_border), bottom=Side(style=bottom_border))
#
#
# ---------------------------------------------------------------
# [6]:
def copy_single_proc(ws,col_from,col_to):
for row_in in range(2,ws.max_row):
for it in range(7):
no_from = col_from + it
no_to = col_to + it
copy_cell_border(row_in,no_from,no_to)
col_letter_from = get_column_letter(no_from)
col_letter_to = get_column_letter(no_to)
column_width_A = ws.column_dimensions[col_letter_from].width
ws.column_dimensions[col_letter_to].width = column_width_A
#
cell_source = ws.cell(row=row_in, column=no_from)
cell_target = ws.cell(row=row_in, column=no_to)
cell_target.value = cell_source.value
cell_target._style = cell_source._style
#
# ---------------------------------------------------------------
xlsx_in=sys.argv[1]
nn_in=int(sys.argv[2])
#
sys.stderr.write("xlsx_in = %s\n" % xlsx_in)
sys.stderr.write("nn_in = %d\n" % nn_in)
wb = openpyxl.load_workbook(filename=xlsx_in)
ws = wb.worksheets[0]
print(ws.max_row)
#
col_from = 10
for it in range(1,nn_in):
jt = it -1
col_to = 16 + jt * 6
copy_single_proc(ws,col_from,col_to)
#
wb.save(xlsx_in)
# ---------------------------------------------------------------
実行コマンド
./copy_borders_value.py in01.xlsx 4