您是否可以使用Python-docx强调同一运行段落的一部分?

时间:2016-01-01 04:58:46

标签: python python-docx

我是python的新手,也是编程新手所以请原谅我的无知。

我正在使用python-docx根据需要自动格式化文档。在我们的数据库应用程序中,我们有大量的表单,这些表单会定期更新。它们都遵循几乎相同的格式,并且我们获得了未根据我们的需求格式化的新更新文档。

所以我对我要做的事情有几个问题: 1)在每个文档中,在文档的开头有一个诸如5.1之类的数字。在数字后我需要放置一个标签,然后在段落的其余部分加下划线。我无法弄明白,也许这与我正在看的方式不可能,但我不能在某个位置放置标签或弄清楚如何强调段落的剩余部分,因为只有一个运行而且我找不到任何方法将一次运行分成两次运行。我能够做的是打开文档并使用pyautogui在计算第1段中有多少个数字后,使用pyautogui.press('right')将空格数移到右边。但我认为这不是首选。 我想也许我可以将文本插入一个字符串,然后从其余的单词中拆分数字,然后使用python-docx删除旧文本,然后插入具有不同格式(运行)的新文本。这是最好的方法吗?还是有更好的方法? 这是我目前执行此任务的方式,但它不允许我加粗。我想使用python-docx执行整个任务,这样我就不再使用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

2)在段落的中间,将以[选项1] [选项2] [选项3]的格式给出不同的选项。我想创建一个内容控件,它将提供这三个选项的下拉选项。没有我读过的地方有一些内容控件与docx。有没有办法做到这一点或只是用pyautogui手动执行此操作我唯一的选择?基本上我的想法是我会在段落中搜索括号[],然后以某种方式将它们输入到内容控件中,如果需要,请使用pyautogui,如果可能的话我更喜欢远离它。

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

1 个答案:

答案 0 :(得分:2)

抱歉 - 我非常确定运行级格式是您可以获得的最精细的格式。添加代码以在段落中创建第二个Run并对其应用下划线样式应该是微不足道的。

不知道下拉列表框

两个风格提示:

你可以使用'in'和常量string.digits和一个连接运算符来简化你很长的if语句

if JI_Title_List[counter] in (string.digits+'.') ....

您可以使用+ =来表示x = x +;例如x + = 1是x = x + 1

counter += 1
JI_Index_Length +=1