Сообщить об ошибке.

Вставка/удаление строк/столбцов, перемещение диапазона ячеек

В материале рассказывается о методах модуля openpyxl, которые позволяют вставлять и удалять строки и столбцы листа электронной таблицы, а также перемещать диапазоны ячеек.

Содержание:


Вставка строк и столбцов.

Модуль openpyxl поддерживает вставку строк или столбцов. Чтобы произвести указанные действия, необходимо использовать соответствующие методы экземпляра рабочего листа Worksheet:

  • Worksheet.insert_cols(idx, amount=1): вставляет столбец или столбцы перед col==idx. Аргумент amount - количество добавляемых столбцов.
  • Worksheet.insert_rows(idx, amount=1): вставляет строку или строки перед row==idx. Аргумент amount - количество добавляемых строк.

По умолчанию вставляется одна строка или столбец. Например, чтобы вставить одну строку перед существующей 7-ой строкой необходимо вызвать ws.insert_rows(7).

Пример:

>>> from openpyxl import Workbook
>>> wb = Workbook()
>>> ws = wb.active
# создадим произвольные данные
>>> data = [[row*col for col in range(1, 16)] for row in range(1, 31)]
# добавляем данные на активный лист
>>> for row in data:
...     ws.append(row)
...
# вставим 3 новые строки перед 
# существующей 7-ой строкой
>>> ws.insert_rows(7, 3)
# сохраняем и смотрим
>>> wb.save('test.xlsx')

Удаление строк и столбцов.

Что бы удалить строки или столбцы, используйте следующие методы экземпляра рабочего листа Worksheet:

  • Worksheet.delete_cols(): удаляет столбец или столбцы, начиная с col==idx. Аргумент amount - количество удаляемых столбцов.
  • Worksheet.delete_rows(): удаляет строку или строки, начиная с row==idx. Аргумент amount - количество удаляемых строк.

По умолчанию удаляется одна строка или столбец. Например, чтобы удалить столбцы в диапазоне F:H необходимо вызвать ws.delete_cols(6, 3).

Пример - продолжение предыдущего:

# удалим 3 столбцы в диапазоне `F:H`
>>> ws.delete_cols(6, 3)
# сохраняемся и открываем файл
>>> wb.save('test.xlsx')

Примечание. При вставке или удалении строк или столбцов модуль openpyxl не управляет зависимостями, такими как формулы, таблицы, диаграммы и т.д. Считается, что это выходит за рамки библиотеки, которая фокусируется на управлении форматом файла. В общем, клиентский код должен реализовывать необходимую функциональность в любом конкретном случае.

Перемещение диапазона ячеек.

Модуль openpyxl обеспечивает перемещение диапазонов ячеек внутри листа методом:

  • Worksheet.move_range(cell_range, rows=0, cols=0, translate=False).

Этот метод перемещает диапазон ячеек cell_range на количество строк rows и/или столбцов cols:

  • вниз, если rows > 0, и вверх, если rows < 0,
  • вправо, если cols > 0, и влево, если cols < 0.

Существующие ячейки будут перезаписаны. Формулы и ссылки обновляться не будут.

Пример:

>>> ws.move_range("D4:F10", rows=-1, cols=2)

Это приведет к перемещению ячеек в диапазоне ячеек D4:F10 вверх на одну строку и вправо на два столбца. Ячейки будут перезаписаны всеми существующими ячейками.

Если ячейки содержат формулы, то openpyxl может транслировать их, но, поскольку это не всегда то, что нужно, по этому этот функционал умолчанию отключен. Кроме того, будут транслированы только формулы в самих ячейках. Ссылки на ячейки из других ячеек или определенные имена обновляться не будут. Для этого можно использовать переводчик формул синтаксического анализа:

>>> ws.move_range("G4:H10", rows=1, cols=1, translate=True)

Это приведет к перемещению относительных ссылок в формулах в диапазоне на одну строку и один столбец.