Как сохранить один документ на основе оператора if в Python? - PullRequest
2 голосов
/ 17 октября 2019

Я пытаюсь сохранить документ на основе оператора if.

Здесь я создаю радиокнопки:

info = ["Option 1", "Option 2", "Option 3"]


vars = []
for idx,i in enumerate(info):
    var = IntVar(value=0)
    vars.append(var)
    lblOption = Label(main,text=i)
    btnYes = Radiobutton(main, text="Yes", variable=var, value=2)
    btnNo = Radiobutton(main, text="No", variable=var, value=1)
    btnNa = Radiobutton(main, text="N/A", variable=var,value=0)
    lblOption.grid(column=4,row=idx, sticky = W)
    btnYes.grid(column=1,row=idx)
    btnNo.grid(column=2,row=idx)
    btnNa.grid(column=3,row=idx)

Здесь я создаюдокумент

document = Document()

#add table
table = document.add_table(1, 4)
#style table
table.style = 'Table Grid'

#populate header row
heading_cells = table.rows[0].cells
heading_cells[0].text = "Options"
heading_cells[1].text = "Yes"
heading_cells[2].text = "No"
heading_cells[3].text = "N/a"

for idx, item in enumerate(vars):
    cells = table.add_row().cells
    cells[0].text = info[idx]  # gets the option name
    val = item.get()  #radiobutton value
    if val == 2:  # checks if yes
        cells[1].text = "*"
    elif val == 1:   # checks if no
        cells[2].text = "*"
    elif val == 0:   # checks if N/A
        cells[3].text = "*"

#save doc
document.save("test.docx")

Работа за кадром:

  • Из 3-х переключателей Да, Нет, Н / Д .. Можно выбрать только один.
  • Далее, когда нажимается кнопка save .., она создает таблицу в docx, Опции в row 0, добавляя вниз вместе с выбранными значениями Да, Нет и N/a.

Как пример:

Options       Yes      No     N/a
Option 1       *
Option 2               *
Option 3       *

Моя проблема:

Я могу просто нажать save, и это сохранитфайл как test.docx.

Теперь я пытаюсь выяснить, как сохранить файл как Failed.docx

. Failed.docx будет создан, только если один или несколько издля всех опций выбрано значение no.

Как пример ниже, оно будет сохранено как Test.docx, поскольку ни в одном из опций не выбрано значение no:

Options       Yes      No     N/a
Option 1       *
Option 2                       *
Option 3       *

Пример ниже, это будет сохранено как Failed.docx,потому что для одной из опций слева была выбрана опция no.

В качестве примера:

Options       Yes      No     N/a
Option 1       *
Option 2               *
Option 3       *

Вот что я пробовал до сих пор:

for x in cells[2].text:
    if "*" in x:
        print("True")
    else:
        print("False")

Обнаруживает * в пределах cell[2] (это строка 2, связанная со значением No).

И если было выбрано значение «нет», онопечатает true, но также печатает false

Например:

Options       Yes      No     N/a
Option 1       *
Option 2               *
Option 3       *

Вывод for loop:

False
True
False

Но если он обнаружит Falseи True оба файла будут сохранены. Я совершенно не понимаю, куда идти отсюда ..

Ответы [ 2 ]

1 голос
/ 17 октября 2019

Вопрос : 'Failed.docx' будет создано только if one or more из всех options, выбрано значение no.

Это можно перефразировать следующим образом:

     if any option has NO

Вы построили list из Boolean из условия value == NO,
как [False, True, False]


  • Встроенный - любой

    любой (итеративный)

    Возвращает True, если какой-либо элемент итерируемого равен true,Если итерация пуста, вернуть False.


    YES = 2; NO = 1; NA = 0

    print(vars)

    if any([v.get() == NO for v in vars]):
        print('Failed.docx')

    else:
        print('test.docx')

Выход :

[2, 0, 2]
test.docx

[2, 1, 2]
Failed.docx
0 голосов
/ 18 октября 2019

Попробуйте следующее:

for x in cells[2].text:
    if "*" in x:
        print("Failed.docx")
    elif "*" not in x:
        print("Test.docx")

это проверяет, находится ли какой-либо "*" внутри вашей строки no, если он существует, сохраните как Failed.docx, если не сохраните как Test.docx

...