Поиск скрытых ячеек с помощью openpyxl

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

Может ли кто-нибудь сказать мне, где искать в рабочей книге, листе, столбце или ячейке объект, чтобы увидеть, где находятся скрытые столбцы?


person Daniel Dow    schedule 06.07.2015    source источник


Ответы (2)


Рабочие листы имеют объекты row_dimensions и column_dimensions, которые содержат информацию об определенных строках или столбцах, например, скрыты они или нет. Размеры столбцов также могут быть сгруппированы, поэтому вам необходимо учитывать это при поиске.

person Charlie Clark    schedule 07.07.2015

Атрибуты, которые вы ищете, находятся внутри атрибутов column_dimensions и row_dimensions объекта Worksheet.

Это связанные словари, значениями которых являются объекты ColumnDimension/RowDimension. Конкретный атрибут, который вы ищете, это ColumnDimension.hidden.

Следующее напечатает букву столбца всех скрытых столбцов на листе ws:

for colLetter,colDimension in ws.column_dimensions.items():
  if colDimension.hidden == True:
     print(colLetter)

И для строк:

for rowNum,rowDimension in ws.row_dimensions.items():
  if rowDimension.hidden == True:
     print(rowNum)

Насколько я понимаю, загрузка вашей книги как read_only может привести к путанице с ws.row_dimensions, так что будьте осторожны в этом случае.

person otocan    schedule 09.11.2017
comment
Пожалуйста, не могли бы вы объяснить, что вы имеете в виду под read_only возиться с ws.row_dimensions? Есть ли какой-нибудь трекер проблем на сайте пакета, объясняющий это? - person gofvonx; 08.12.2020
comment
@gofvonx Извините, нет, я не помню, где я это прочитал. Я знаю, что открытие в режиме только для чтения приводит к исчезновению некоторых атрибутов. Например, ws.merged_cells больше не существует в качестве атрибута при открытии файла в режиме только для чтения в openpyxl 3.0.4: AttributeError: 'ReadOnlyWorksheet' object has no attribute 'merged_cells' - person otocan; 08.12.2020
comment
Спасибо за разъяснения. Я столкнулся с проблемой, связанной с ошибкой row_dimensions, но в read_only=False, так что, вероятно, это не связано. - person gofvonx; 09.12.2020