如何使用Python在DOCX文件中创建表?

如何使用Python在DOCX文件中创建表?,python,tkinter,ms-word,docx,Python,Tkinter,Ms Word,Docx,我正试图将选中的值从单选按钮发送到.docx文件中 导入我需要的内容,重点是docx import tkinter as tk from docx import Document main = tk.Tk() 这些是我需要放在表格左侧word文档中的选项,它们在调查中充当问题 info = ["option 1", "option 2", "option 3", "option 4" ] 在这里,我放置了名为Yes,No&N/A的单选按钮,这些按钮是对左侧选项的回答(上面的

我正试图将选中的值从单选按钮发送到
.docx
文件中

导入我需要的内容,重点是docx

import tkinter as tk
from docx import Document
main = tk.Tk()
这些是我需要放在表格左侧word文档中的选项,它们在调查中充当问题

info = ["option 1", "option 2", "option 3", "option 4"
         ]
在这里,我放置了名为
Yes,No&N/A
的单选按钮,这些按钮是对左侧选项的回答(上面的
info
列表),还有
Label
来表示选项或其他问题

vars = []
for idx,i in enumerate(info):
    var = tk.IntVar(value=0)
    vars.append(var)
    lblOption = tk.Label(main,text=i)
    btnYes = tk.Radiobutton(main, text="Yes", variable=var, value=2)
    btnNo = tk.Radiobutton(main, text="No", variable=var, value=1)
    btnNa = tk.Radiobutton(main, text="N/A", variable=var,value=0)
    lblOption.grid(column=0,row=idx)
    btnYes.grid(column=1,row=idx)
    btnNo.grid(column=2,row=idx)
    btnNa.grid(column=3,row=idx)
这是我的功能,创建文档并保存是最简单的部分。我的问题是,我在创建一个表时被搞糊涂了,这个表将;左侧的选项(来自顶部的
info
)是标题(请参见单选按钮
yes、no和N/a
)。和所选数据,例如,如果对于
选项1
我选择了否,则将数据保存到
.docx
文件中,其中一个文件已被选中(请参见所需输出的页面底部示例)。

def send():
    document = Document()
    section = document.sections[0]
    #add table
    table = document.add_table(1, 4)
    #style table
    table.style = 'Table Grid'

    #table data retrived from Radiobuttons
    items = vars.get()

    #populate header row
    heading_cells = table.rows[0].cells
    heading_cells[0].text = "Options"
    heading_cells[1].text = btnYes.cget("text")
    heading_cells[2].text = btnNo.cget("text")
    heading_cells[3].text = btnNa.cget("text")

    for item in items:
        cells = table.add_row().cells
        cells[0].text = #Options
        cells[1].text = #Yes values
        cells[2].text = #No values
        cells[3].text = #N/A values
    #save doc
    document.save("test.docx")

#button to send data to docx file
btn = tk.Button(main, text="Send to File", command= send)
btn.grid()

main.mainloop()
这就是它所揭示的:

以下是所需的输出:

数字
1
表示从tkinter应用程序中选择的项目。但我会想办法把它改成勾选框


我有点困惑我在哪里,我是新使用docx的。。我一直在试着读。。这就是我给自己挖了个洞的地方。

在您当前的代码中,
vars
IntVar
s的列表。您希望单独获取每个值,而不是
vars.get()
。另外,在写入docx文件时,您需要
info
和单选按钮的值,为了跟踪它们,您可以使用索引

只需对代码进行最小的更改,就可以使用类似的内容

def send():
    ...
    ... 
    heading_cells[3].text = btnNa.cget("text")

    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 = "1"
        elif val == 1:   # checks if no
            cells[2].text = "1"
        elif val == 0:   # checks if N/A
            cells[3].text = "1"

    #save doc
    document.save("test.docx")
也可以使用字典将单选按钮映射到单元格

valuesCells = {0: 3, 1: 2, 2: 1}  # value of radiobutton: cell to write
                                  # hard to read what's going on though
for idx, item in enumerate(vars):

    cells = table.add_row().cells
    cells[0].text = info[idx]  # gets the option name
    val = item.get()
    cells[valuesCells[val]].text = "1"

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

我不明白问题出在哪里。你说的是“我有一个做A的程序,我正在尝试做B。B不起作用。我怎么做B?”我能提供的唯一答案是为你写这个程序。这不是一个有意义的答案,对任何人都没有帮助。您能否提供一份清晰的声明,说明您的问题以及您试图如何解决它?因此,您的问题与将信息写入文件或tkinter无关。您是否只需要知道如何从Python在.docx文件中创建一个输入为列表的表?因此,您没有提供一个最小的、可复制的示例。tkinter只是一个用作调查的应用程序,
.docx
文件用作从tkinter输入的证据。但是,是的,如何基于我的loopsOk创建一个表,所以你的问题不是“Tkinter如何使用循环将数据保存到DOCX文件?”,而是“如何使用Python在DOCX文件中创建一个表?”@EthanField让我回到你的问题上来,我会改进我的问题嗨,很抱歉反应太晚。这太完美了!即使我还没有编辑我的问题。。