Складывание нескольких строк с помощью openpyxl

Есть ли способ сложить несколько строк, используя openpyxl? Кажется, нет строки, эквивалентной примеру, найденному на странице простого использования openpyxl. .

import openpyxl
wb = openpyxl.Workbook(True)
ws = wb.create_sheet()
ws.column_dimensions.group('A','D', hidden=True)
wb.save('group.xlsx')

person lyineyes    schedule 25.11.2014    source источник


Ответы (3)


Нет, эквивалента нет, но со строками немного проще работать, потому что они всегда есть, ColumnDimensions создаются по запросу. Просто установите строки, которые вы хотите скрыть.

Например. чтобы скрыть строки с 5 по 9:

for idx in range(5, 10):
    ws.row_dimensions[idx].hidden = True
person Charlie Clark    schedule 25.11.2014
comment
Спасибо. В цикле я также добавил ws.row_dimensions[idx].outlineLevel = 1, чтобы получить то же поведение, что и в примере со столбцом. - person lyineyes; 26.11.2014
comment
Есть ли что-нибудь еще, что я должен сделать после ws.row_dimensions[idx].hidden = True? Строка выполняется, но когда я открываю существующий файл, строки не скрываются. - person sivag1; 29.04.2019

Вы можете сделать это, используя метод row_dimensions.group

from openpyxl import Workbook

wb = Workbook()
ws = wb.create_sheet()
ws.column_dimensions.group("A", "D", hidden=True)
ws.row_dimensions.group(1, 5, hidden=True)
wb.save("group.xlsx")
person Vlad Bezden    schedule 29.06.2020

Я искал это и нашел только свой собственный ответ о том, как сделать то же самое для столбцов! https://stackoverflow.com/a/60214627

Похоже, есть два режима с разными API: 1. Ручка захвата (-) сверху и 2. Ручка захвата снизу. Каждый режим имеет свое странное поведение, как показано ниже.

Заказ имеет значение! Вам нужно определить внешний уровень перед внутренним.

Пример кода для трех уровней структуры.

  • Уровень 1 (крайний) — ряды 2–25
  • Уровень 2 (самый средний) - Ряды 4-9
  • Уровень 3 (самый внутренний) - Ряды 6-7

Скриншот выходных данных Google Таблиц

#!/usr/bin/env python3
import openpyxl

wb = openpyxl.Workbook()
ws = wb.active
for i in range(1, 25+1):
  ws.append([i])

# Expand handle at bottom
# ws.sheet_properties.outlinePr.summaryBelow = True
# ws.row_dimensions.group(2, 25-1, outline_level=1)
# ws.row_dimensions.group(4, 9-1, outline_level=2)
# ws.row_dimensions.group(6, 7-1, outline_level=3)

# Expand handle at top
# NOTE: Order counts!
ws.sheet_properties.outlinePr.summaryBelow = False
ws.row_dimensions.group(2+1, 25, outline_level=1)
ws.row_dimensions.group(4+1, 9, outline_level=2)
ws.row_dimensions.group(6+1, 7, outline_level=3)

wb.save('testrows.xlsx')
person maxslug    schedule 21.04.2021