Python и Excel. Прочитать и не потерять

Всем доброго времени суток! C вами Петр Хрущев!

Как прочитать файл Excel, если он напоминает монстра Франкенштейна? Как склеить множество таких файлов в единый датасет и обработать их, не потеряв ни одной лишней ячейки? Это и многое другое, включая подробности разработки нового инструмента, вы найдёте в посте.

1

Круто!
Я пытался написать читалку, но бросил, т.к. решил задачу чтения 300+ xls* с костылями.
Но я сразу решал большую часть проблем на стороне Excel с WYSIWYG допущением, т.е. читал отформатированные значение в строку, оставляя интерпретации получателю данных.
И да, использовал UsedRange, NamedRange и фильтры (если установлены).
thead, th, td, tbody, td и tfoot, и да по строкам, но размер массива предопределен UsedRange.

Ответить
Автор

Иногда проще прочитать всё в виде строк, а потом отдать все на милость получателя данных. Ключевой момент здесь - возможно ли это в принципе. И особенно важно - возможно ли в автоматическом режиме.
Сначала тоже пользовался "костылями" - писал try - expert на тот случай, если заголовок таблицы оказывался смещен на одну строку вниз. Но у меня было всего 30+ файлов, и вариация смещения заголовка была одна(боюсь, сколько использованных try-export пришлось бы писать на 100+ файлов). И заголовок получался не презентабельным, из-за того, что был в оригинале многострочным. С этим была просто беда.
Недавно так же был случай с файлом XLSX на 3GB - вот это был реально монстр. Excel его попросту не смог открыть за обозримую вечность - и каждый лист был без указания диапазона, и содержал 10480000 строк. Здесь важно отметить, что строки в памяти, всё-таки, занимают куда больше места, чем числа или даты/время - и особо разница ощутима если не пользовались PyArrow/Polars. Боюсь, Apache Parquet. Дальнейшая работа с ними в Polars была весьма проста и быстра)
Да, это странный и ужасный пример, но весьма реальный, к сожалению. Кто знает каким инструментом этот файл был создан...

Ответить