#python #excel #openpyxl
#python #excel #openpyxl
Вопрос:
Я пытаюсь создать код с использованием Python для многократного копирования определенного диапазона файлов Excel.
Как и в приведенном ниже файле изображения, то же содержимое копируется путем размещения нескольких столбцов на листе с существующим содержимым на том же листе.
введите описание изображения здесь
Несмотря на то, что это начальный уровень владения, сначала я полагал, что это будет действительно легко реализовать. И я реализовал большую часть своих планов с помощью приведенного ниже кода, за исключением объединенных ячеек
import openpyxl
from openpyxl import Workbook
wb = openpyxl.load_workbook('DSD.xlsx')
ws = wb.worksheets[3]
from openpyxl.utils import range_boundaries
min_col, min_row, max_col, max_row = range_boundaries('I1')
for row, row_cells in enumerate(wb['2'], min_row):
for column, cell in enumerate(row_cells, min_col):
# Copy Value from Copy.Cell to given Worksheet.Cell
ws.cell(row=row, column=column).value = cell.value
ws.cell(row=row, column=column)._style = cell._style
wb.save('DSD.xlsx')
введите описание изображения здесь
Тем не менее, я искал несколько дней и думал об этом, но я не знаю, как объединить объединенные ячейки. Помимо этого, я даже не знаю, возможно ли это технически.
То, как я думал об этом сегодня, заключалось в том, чтобы извлечь список объединенных ячеек на листе, а затем добавить только дополнительные столбцы из координат каждой объединенной ячейки, чтобы добавить команды для объединения в том же объеме.
Однако, поскольку я вытащил список объединенных ячеек, как показано ниже, я не могу придумать, что делать. Есть ли способ?
import openpyxl
from openpyxl import Workbook
wb=openpyxl.load_workbook('merged.xlsx')
ws=wb.active
Merged_Cells = ws.merged_cell_ranges
a = Merged_Cells[0]
print(ws.merged_cell_ranges)
print(a)
[<MergedCellRange B2:C3>, <MergedCellRange B9:C9>, <MergedCellRange B13:B14>]
B2:C3
Значение B2: C3, соответствующее a, представляется специальным значением, в котором a.replace(~~) не работает, даже если значение похоже на «B2: C3».
Неужели нет никакого способа?
Ответ №1:
Вам нужно посмотреть, как работают CellRanges, потому что вам нужно будет вычислить смещение для каждого диапазона, а затем создать новый MergedCellRange для новой ячейки, используя размеры из оригинала.
Следующее должно дать вам представление о том, как это сделать.
from openpyxl.worksheet.cell_range import CellRange
area = CellRange("A1:F13") # area being copied
for mcr in ws.merged_cells:
if mcr.coord not in area:
continue
cr = CellRange(mcr.coord)
cr.shift(col_shift=10)
ws.merge_cells(cr.coord)