Извлечь текст и сравнить ячейки из таблицы - python docx - PullRequest
1 голос
/ 06 февраля 2020

У меня есть программа, которая печатает случайное значение из списка в ячейках таблицы, используя python docx. Количество таблиц, ячеек и строк зависит от ввода пользователя. Мне нужно сравнить ячейки таблиц перед вводом значения в той же числовой ячейке в другой таблице.

Например.

number_of_tables = 5 #input by user
number_of_rows = 4 #input by user
number_of_cols = 7 #input by user

list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

docu = Document()

for tablenum in range(number_of_tables):
    tablename = docu.add_table(rows = number_of_rows, cols = number_of_cols)
    for rowiteration in tablename.rows[0:]:
        for cells in rowiteration.cells:
            cells.text = random.choices(list)

Если здесь ячейка (0,0) в таблице 1 имеет ' «Я не хочу печатать в« а »в ячейке (0,0) таблицы 2 и далее больше.

1 Ответ

1 голос
/ 06 февраля 2020

Как правило, вы хотите выбрать случайное значение из list, но исключить одно (или более) значение (я) - см. Также этот вопрос .

Поэтому вы должны создать другой список без значений, которые вы хотите исключить - например, чтобы исключить значение 'a' из выбора:

random.choice([s for s in list if s != 'a'])

Для вашего сценария вы придется исключить все значения из одной и той же ячейки (r,c) в других таблицах следующим образом:

for tablenum in range(number_of_tables):
  tablename = docu.add_table(rows=number_of_rows, cols=number_of_cols)
  for r, rowiteration in enumerate(tablename.rows):
    for c, cells in enumerate(rowiteration.cells):
      exclude = [docu.tables[num].cell(r,c).text for num in range(tablenum)]
      cells.text = random.choice([s for s in list if s not in exclude])
...