Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Стратеги поиска данных в файле #21

Open
yakovistomin opened this issue May 12, 2020 · 0 comments
Open

Стратеги поиска данных в файле #21

yakovistomin opened this issue May 12, 2020 · 0 comments

Comments

@yakovistomin
Copy link
Collaborator

Проблема 1:
Сейчас парсер получает данные из первого (активного) листа xlsx файла.

Не обработаны случаи:

  • Файл содержит несколько листов (worksheet) с данными и все их нужно обработать.
  • Файл содержит несколько листов и данные находятся на каком-то конкретном листе.
  • Файл содержит несколько листов и не все они с данными. Нужно обработать несколько листов

Проблема 2:
Сейчас заголовок таблицы ищется в строке header_row_index страницы.

Не обработаны случаи:

  • header_row_index изначально неизвестен. Допустим в файле сначала идет шапка документа произвольной высоты, а дальше таблица с данными, которые нужно получить.
  • на разных страницах документа заголовок таблицы находится на разных строках
  • для разных колонок заголовок находится на разных стоках (заголовок многострочный)

Проблема 3:
Под таблицей с данными может быть колонтитул (например ячейки с местами для подписи).

Не решена проблема определения последней строки с данными.
Сейчас можно или указать last_row_index, или завязаться на наличие значение в какой-то из колонок и делать SkipRow для всех строк, у которых в этой ячейке нет данных.
Кажется, что этого мало.

Решение
Предлагаю ввести понятия:

  • Стратегия поиска листа с данными
  • Стратегия поиска заголовка таблицы с данными
  • Стратегия поиска первой и последней строки с данными.

Стратегия поиска листа с данными

Актуально только для xlsx документов

  • активный лист (default) - парсер получает данные с активного листа файла.
  • все листы файла - парсер получает данные со всех листов файла
  • список листов - указываем названия или индексы листов, парсер собирает данные только из них
  • все листы, на которых были найдены таблицы с данными - перебираем все листы, проверяем наличие правильного заголовка таблицы (подумать на какие еще признаки можно опереться)

Стратегия поиска заголовка таблицы с данными

  • по header_row_index (default) - данные лежат в конкретной строке, индекс которой заранее известен
  • первая строка, значения ячеек в которой совпадают с ожидаемым заголовком таблицы - перербираем построчно файл, каждую строку сравниваем с ожидаемым заголовком. Первое совпадение - строка с заголовком таблицы

Стратегия поиска первой строки с данными

  • по first_data_row_index - данные лежат начиная со строки, индекс которой заранее известен
  • первая непустая строка после заголовка
  • n строка после заголовка
  • первая строка удовлетворяющая условию

Стратегия поиска последней строки с данными

  • конец файла - все строки до конца файла содержат данные
  • по last_data_row_index
  • первая строка удовлетворяющая условию
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant