Skip to content

den1s0v/vstu_xls

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

vstu_xls

Parsing human-made Excel (.xls/.xlsx) sheets into machine-readable form.
Main application of the configurable project is to deal with VSTU's timetable files (in Russian).

Status / Статус

Some successful experiments. / Tcnm успешные эксперименты, в отладке 2D-парсер.

Схема задания отступов внутренних и внешних компонентов паттерна

Жирный прямоугольник — это родительский 2D-паттерн, остальное — это его компоненты, которые ссылаются на другие паттерны с целью включить их в состав родительского паттерна. Отступы

Некоторые термины проекта

  • Сетка - двумерное целочисленное координатное пространство.
  • Ячейка - минимальная единица сетки, обладающая координатами и ненулевым размером (для случая объединённых ячеек размер более 1х1).
  • Строковый шаблон - паттерн, включающий в себя регулярное выражение, который определяет тип контента ячейки по ее текстовому содержимому.
  • Паттерн - 2D-шаблон некоторой структуры на сетке; может быть трёх видов: ячейка, структура, массив.
    • Паттерн-ячейка (cell) - одна “физическая” ячейка с контентом определённого типа.
    • Паттерн-структура (area) - одна или более ячеек, потенциально различных типов, объединенных паттерном; каждый компонент встречается в структуре только один раз.
    • Паттерн-массив (array) - одна или более ячеек одного типа (паттерна), расположенных близко друг к другу.
  • Компонент - это часть паттерна, которая позволяет включить другой паттерн в состав родительского; может обладать ограничениями на позицию внутри родительской структуры (для внутренних компонентов), или вовне (для внешних компонентов).
  • Область совпадения (match) - прямоугольник с известными координатами на сетке (координаты угла и длина+ширина), в котором обнаружен некоторый паттерн.
  • Ограничения на положение (location) - набор отступов типа padding или margin в любом из четырёх направлений (left, top, right, bottom), каждый из которых может быть задан целым числом или диапазоном. Ограничения накладываются на расположение компонента относительно родительского паттерна.
  • Диапазон (open_range) - интервал (два числа), обозначающий левую и правую границу (обе включительно), причём любая из них может быть бесконечной, то есть диапазон может быть открытым интервалом.
  • Промежуток (gap) - диапазон допустимого расстояния между элементами массива.
  • Направление расположения элементов массива (direction) - взаимное расположение элементов массива: row - ряд по горизонтали, column - ряд по вертикали, fill - область произвольной формы, где элементы расположены друг от друга на расстоянии не более заданного промежутка (gap).

Интерпретация отступов в location

location -- это набор отступов по 4 сторонам (если какая-то сторона не указана, то она считается по умолчанию: см. таблицу). location

Некоторые структуры описания паттернов грамматики

Паттерн - это:

  • имя (ключ словаря: идентификатор по типу имени переменной)
  • описание (description) - многострочный комментарий для человека
  • вид (kind): ячейка, структура, массив
  • Свойства:
    • ограничения на размер (size, опционально)
    • ограничения на количество объектов в документе (count_in_document, опционально)

Паттерн типа “ячейка”:

  • content_type - тип контента

Паттерн типа “массив”:

  • direction - направление заполнения(роста)
  • item-pattern - повторяющийся паттерн
  • gap - допустимый отступ между элементами (диапазон)
  • item_count - ограничение на количество элементов в массиве (диапазон)

Паттерн типа “структура”:

  • inner - перечисление внутренних компонентов (ключ - имя компонента)
  • outer - перечисление внешних компонентов (ключ - имя компонента)

Компонент - это часть паттерна, который позволяет включить другой паттерн в состав родительского:

  • вид (внутренний или внешний), задается ключом inner/outer в паттерне
  • ссылка на дочерний паттерн (pattern) или inline-определение паттерна (pattern_definition)
  • ограничения на размер — двойной диапазон (size, опционально)
  • ограничения на расположение относительно родительского паттерна (location, опционально)

Средства

  • openpyxl и/или xlrd для извлечения информации о содержимом и форматировании ячеек, а также о стиле границ между ними
  • xls2xlsx для конвертации старого формата (Excel 2003) в новый (Excel 2007+) (НЕ COM (pywin32) + MS Excel, т.к. данные заменяются формулами)
  • re (регулярные выражения) для классификации и разбора содержимого ячеек

Частичная структура проекта (наброски)

Структура проекта

About

Parsing human-made structured Excel (.xls, .xlsx) sheets into machine-readable form

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Contributors 2

  •  
  •