Рекурсивно разбирать электронную таблицу в openpyxl - PullRequest
0 голосов
/ 31 октября 2019

Есть сценарий, в котором,

  1. Скажем, есть SpreadsheetA, который содержит некоторые детали.
  2. А в SpreadsheetA у меня когда-нибудь будет путь к другой SpreadsheetB, скажем SpreadsheetBкоторая содержит детали, аналогичные SpreadSheetA, и внутренне может содержать ссылки на другие.
  3. Создан код, который анализирует SpreadsheetA и загружает данные в глобальный массив. Когда он повторяется, он перебирает строки / столбец.
  4. Но возможно ли написать этот код синтаксического анализа и выполнить их рекурсивно? такой, что он снова вызывает тот же код для анализа внутренней таблицы и т. д.?

Потому что я не уверен, как играть с номерами строк / столбцов и т. д., и как это происходит, когда это происходит. вещи рекурсивно?

Пожалуйста, предоставьте свой вклад! Спасибо!

ОБНОВЛЕНИЕ: фрагмент кода, который я пробую.

def parse_sheet(self, <sheetname>):
   for n in range (2, max_row):
       # This if condition looks if there is a link to another Sheet
       if (sheet.cell(row=n, column=1).value != None and sheet.cell(row=n, column=11).value != None):
         # Get Sheet name
         self.parse_sheet(<sheet_name>) 
       elif (sheet.cell(row=n, column=1).value != None and sheet.cell(row=n, column=11).value == None):
         # continue parsing the on-going sheet.

Комментарий к выполнению потока:

  1. Код начал синтаксический анализ первого листа, т.е. SheetA.
  2. Сначала он переходит к циклу elif и начинает синтаксический анализ первого листа - SheetA.
  3. Когда встречается ссылка на другой лист, выполняется цикл if. На этом шаге он рекурсивно вызывает ту же функцию снова с новым листом.
  4. Код смог проанализировать первые несколько строк в SheetA, затем перешел к SheetB, завершил анализ.
  5. НоУ меня была ссылка на другой лист в SheetB. Но код не смог ни проанализировать этот файл / ни вызвать его рекурсивно.
  6. Но он продолжал завершать остальные строки для анализа в SheetA.
...