Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以使用Python docx在同一段中的段落部分下划线吗?_Python_Python Docx - Fatal编程技术网

可以使用Python docx在同一段中的段落部分下划线吗?

可以使用Python docx在同一段中的段落部分下划线吗?,python,python-docx,Python,Python Docx,我对python和编程都是新手,所以请原谅我的无知 我正在使用PythonDocx根据需要自动格式化文档。在我们的数据库应用程序中,我们有大量的表单,它们会定期批量更新。他们都遵循几乎相同的格式,我们得到了新更新的文档,而不是我们需要的格式 所以我有几个问题要问我想做什么: 1) 在每个文档的开头都有一个数字,如5.1。在数字之后,我需要放置一个制表符,然后在段落的其余部分下划线。我搞不清楚,也许从我的角度看,这是不可能的,但我无法在某个位置设置制表符,也无法找出如何在段落的剩余部分加下划线,因

我对python和编程都是新手,所以请原谅我的无知

我正在使用PythonDocx根据需要自动格式化文档。在我们的数据库应用程序中,我们有大量的表单,它们会定期批量更新。他们都遵循几乎相同的格式,我们得到了新更新的文档,而不是我们需要的格式

所以我有几个问题要问我想做什么: 1) 在每个文档的开头都有一个数字,如5.1。在数字之后,我需要放置一个制表符,然后在段落的其余部分下划线。我搞不清楚,也许从我的角度看,这是不可能的,但我无法在某个位置设置制表符,也无法找出如何在段落的剩余部分加下划线,因为只有一段,我无法找到任何方法将一段拆分为两段。我所能做的就是打开文档,并使用pyautogui将空格数移到右边。在计算第1段中的数字后,在循环中按('right')。但我认为这不是首选。 我想也许我可以将文本插入一个字符串,然后将数字从其余的单词中分离出来,然后使用python docx删除旧文本,然后插入具有不同格式的新文本(运行)。这是最好的方法还是有更好的方法? 这是我目前执行此任务的方式,但不允许我加粗。我希望使用pythondocx执行整个任务,这样我就不会依赖于使用gui来进行更改

def JITitleNumberLength():
    doc = docx.Document('1ji.docx')
    p0 = doc.paragraphs[0]
    p0Size = len(p0.text) #finds length of title in paragraph 0
    JI_Title = p0.text
    JI_Title_List = list(JI_Title)
    #print(JI_Title_List[2])
    JI_Index_Length = 0 #Returns the amount of numbers in the title of the Jury Instruction
    counter = 0
    while (counter < p0Size) and True:
        #print(JI_Title_List[counter], ' ', JI_Index_Length)
        if (JI_Title_List[counter] == '1' or
        JI_Title_List[counter] == '2' or
        JI_Title_List[counter] == '3' or
        JI_Title_List[counter] == '4' or
        JI_Title_List[counter] == '5' or
        JI_Title_List[counter] == '6' or
        JI_Title_List[counter] == '7' or
        JI_Title_List[counter] == '8' or
        JI_Title_List[counter] == '9' or
        JI_Title_List[counter] == '0' or
        JI_Title_List[counter] == '.'):
            #print('If Statement True')
            JI_Index_Length = JI_Index_Length + 1
        else:
            #print('False')
            False
        counter = counter + 1
    return JI_Index_Length


def OpenDocumentForAutoGUI():
    os.system("start " + '1ji.docx')
    time.sleep(1) #causes delay to allow document to full open before next command runs

def main():
    TitleNumberLength = int(JITitleNumberLength())
    for i in range(TitleNumberLength):
        pyautogui.press('right')
    pyautogui.press(['delete', 'tab']) #removes space and inserts tab between number and instruction name
def JITitleNumberLength():
doc=docx.Document('1ji.docx')
p0=文件段落[0]
p0Size=len(p0.text)#在第0段中查找标题的长度
JI_Title=p0.text
JI_Title_List=列表(JI_Title)
#打印(JIU标题列表[2])
JI_Index_Length=0#返回陪审团指令标题中的数字量
计数器=0
while(计数器

2)在段落的中间,将有不同的选择,如[期权1 ] [期权2 ] [期权3 ]的格式。我想创建一个内容控件,提供这三个选项中的一个下拉选项。我所读到的任何地方都没有关于docx内容控制的内容。有没有办法做到这一点,或者只是用pyautogui手动完成这一点,这是我唯一的选择?基本上,我的想法是在段落中搜索括号[],然后以某种方式将它们输入到内容控件中,如果需要,使用pyautogui,如果可能的话,我宁愿远离它


我甚至还没有开始编写这部分的代码,我唯一的想法是将每个选项放入一个列表中,然后在使用pyautogui手动移动鼠标单击word中的“开发人员”选项卡后从列表中调用,然后选择内容控件,因为没有键盘快捷键来引入内容控件。我真的不想这样做,因为屏幕分辨率起着很大的作用,只有特定的屏幕分辨率才能工作。

对不起,我非常确定运行级格式是您能得到的最精细的格式。添加代码在段落中创建第二次运行并对其应用下划线样式应该很简单

不知道下拉列表框

两个风格提示:

您可以将“in”和常量string.digits与串联运算符一起使用,以简化很长的if语句

if JI_Title_List[counter] in (string.digits+'.') ....
你可以用+=来表示x=x+;e、 g.x+=1等于x=x+1

counter += 1
JI_Index_Length +=1

我不知道你能用这样的陈述。谢谢谢谢你的提示!我有一种感觉,它不会像那样工作。我会看看我能做些什么,然后试着在这里发布一些代码来批评。你说得对,运行是字体格式化的“颗粒”。这实际上是跑步的定义。运行中的所有文本共享相同的字体格式,包括字体、大小、颜色、粗体、斜体等。其他文本格式(如对齐和对正)应用于段落级别,但这是段落格式,而不是字体级别。将文本分为多个段落正是正确的方法,例如,在文本中的单个单词下划线。