精华内容
下载资源
问答
  • 不同格式的word文档合并为一个...最终汇总需要 清除Word的标题样式保留字体格式() 解决方式: 开始享用python+docx解决。但是docx在原始文档没有style的情况下,无论如何添加不进去。 if match(run.text,"第*章

    不同格式的word文档合并为一个文件。

    问题:

    文件汇编,需要将70多个文件汇编成一个到一个文件里。最终汇编的方式是用word--插入--对象--文件中的文字。

    但是由于原始文件有的设置了自动编号。插入后在合并后的文档上继续编号导致混乱。有的没有设置标题样式,提取不出来目录。

    最终汇总的时候,需要清楚自动编号的域,已经生成的编号转换成文字,统一设置标题格式.

    同一个段里,字体还不一样,需要清除Word的标题样式保留字体格式。

     

    解决方式:

    开始享用python+docx库解决。但是docx库在原始文档没有style的情况下,无论如何添加不进去。

    if match(run.text,"第*章*"): #匹配模式为问号,及匹配一个任意字符
       document.add_heading("",level=1)
       paragraph.style = document.styles['heading 1']

    这样的总是出错,因为heading不存在,查了官方文档,说word默认有很多样式,但是你不起用的话,文档里是没有这个样式的。docx文档里也没说怎么解决。

    "no style with name 'Heading 1'"

    换解决思路:

    用 win32com 操作

    里面用到一句

    ActiveDocument.ConvertNumbersToText
    
    

    在VBA里运行没有问题,但是win32调用也出错。

    查找过程中查到一个用WIN32直接运行宏命令的方式,算球,全部代码写在vba里,python循环目录和重命名就好。这样的好处是,python只负责循环和重命名,有需求直接修改vba.bas就好了,宏兼容性最高。

    于是代码如下:

    import os
    import glob
    
    from win32com.client import constants
    
    from win32com.client import Dispatch #需要安装的是pypiwin32模块
    
    App=Dispatch('Word.Application')
    App.Visible=0
    
    def addmaco(file):
       
        App.DisplayAlerts = 0
        doc = App.Documents.Open(file)
        #导入宏代码
    
        #通过文档实例,获取VBProject的组件,其中VBComponents中的参数至关重要,因为ThisDocument表示该文档,也就是说所有这篇生成文档的操作在该组件中都可以捕获#到,那么就可以在里面创建Document_Open函数来监控文档被打开
    
        docCode = doc.VBProject.VBComponents("ThisDocument").CodeModule
        macro = ""
    
        #vba.bas为宏文件,需要导入到ThisDocument,ThisDocument即对应word下,按Alt+F11,调出vba窗口,该文档下的Microsoft Word对象下的ThisDocument。
        string=open("vba.bas", encoding='utf-8')
        macro=string.read()
        docCode.AddFromString(macro)
        #doc.Save()   #添加宏这里不能保存,因为word无法保存为不含宏的文件.但是添加宏以后就可以运行了。python里就是用到这个功能
        
    def DelMacro(file): #添加宏
        App.DisplayAlerts = 0
        doc = App.Documents.Open(file) 
        doc.Save() 
    
    
    
    def get_file_path(root_path,file_list,dir_list):
        #获取该目录下所有的文件名称和目录名称
        dir_or_files = os.listdir(root_path)
        for dir_file in dir_or_files:
            #获取目录或者文件的路径
            dir_file_path = os.path.join(root_path,dir_file)
            #判断该路径为文件还是路径
            if os.path.isdir(dir_file_path):
                dir_list.append(dir_file_path)
                #递归获取所有文件和目录的路径
                get_file_path(dir_file_path,file_list,dir_list)
            else:
                file_list.append(dir_file_path)
    
    
    root_path = r"D:\企业制度"
    
    file_list = []
    dir_list = []
    path='d:/'
    get_file_path(root_path,file_list,dir_list)
    
    
    
    for dirlst in dir_list:
        path=dirlst
        print(path)
        preName="" #二级目录
        dir=(dirlst.split("\\"))                            
        if (len(dir))>2:
            preName=(dir[2])
    
        old_names = os.listdir(path)  #取路径下的文件名,生成列表
    
    
        for old_name in old_names:      #遍历列表下的文件名
            if os.path.isfile(path + "\\" +old_name): #防止文件夹加上.pdf后缀,先判断是否是文件,必须带路径
                if old_name.endswith('.doc') or old_name.endswith('.docx'):
                    
                    file=path + "\\" +old_name
                    print("打开:"+file)
    
                    doc = App.Documents.Open(file)
                    addmaco(file)
                    App.Application.Run("numTotext")
               
                    filename=App.ActiveDocument.Sentences(1).Text.replace('\r','') #删除字符串里的回车符
                    if filename=="": #如果第一行为空,取第二行
                        filename=App.ActiveDocument.Sentences(2).Text.replace('\r','')
                        filename=filename.replace('\t','')
    
    
                    filename=filename.replace('\t','')
                    #filenamePara=str(App.ActiveDocument.Paragraphs(1)).replace('\r','')
                    #filenamePara=filenamePara.replace('\t','')
                    #print(filenamePara)
                    print(filename)       
                    newpath="d:\\企业制度统一格式\\"+preName
                    Newfile=newpath+"\\"+preName+"_"+str(filename)
                    print(Newfile)
                    doc.SaveAs(Newfile,16) #将所有doc,docx都统一保存为docx,后面带16
    
                    doc.Close()
    App.Quit() 
    

    vba.bas文件如下

    Sub numTotext()
        '数字转文本 
        '仅list是 ActiveDocument.range.listformat.ConvertNumbersToText
        ActiveDocument.ConvertNumbersToText '自动编号的数字会变成文本,但是域还在
        '删除第一行'单位名称'
    
        Selection.HomeKey Unit:=wdStory
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = "单位名称^p" '包括换行
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindAsk
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchByte = True
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute Replace:=wdReplaceOne
        End With
        
        Selection.HomeKey Unit:=wdStory '回到首行
    
        Dim searchStr
        searchStr = Chr(13)
        If (InStr(ActiveDocument.Paragraphs(1).Range.Text, searchStr) = 1) Then     '如果第一行是回车,删除
            Selection.Range.Delete
        End If
    
    
    
        '去除底纹
        Selection.WholeStory 
        Options.DefaultHighlightColorIndex = wdNoHighlight
        Selection.Range.HighlightColorIndex = wdNoHighlight
    'Sub 清除Word的标题样式保留字体格式()
         Dim para As Paragraph
         Dim fnt As Font
         Dim pfmt As Variant
         Dim lineup1 As Variant
         Dim lineup2 As Variant
         Dim linedo1 As Variant
         Dim linedo2 As Variant
         Dim fntName As Variant
         Dim fntsize As Variant
         Dim shSj As Variant
         Dim lineSpace As Variant
         Dim lnSpcrule As Variant
         Dim alnMent As Variant
         
        With ActiveDocument.Styles("正文").Font
            .NameFarEast = "仿宋_GB2312"
            .NameAscii = "Calibri"
            .NameOther = "Calibri"
            .Name = "Calibri"
            .Size = 16
        End With
    
         
        '无标记
        With ActiveWindow.View.RevisionsFilter
            .Markup = wdRevisionsMarkupNone
            .View = wdRevisionsViewFinal
        End With
    
        '接受修订
        ActiveDocument.AcceptAllRevisions
        ActiveDocument.TrackRevisions = False
         
         
         For Each para In ActiveDocument.Paragraphs
             With para
                 'If .Style <> ActiveDocument.Styles("正文") 不同的文章的正文格式也不一样,所以无论什么格式通通成正文
                 Set fnt = .Range.Font '转换样式之前,先记下来字体
                 Set pfmt = .Style.ParagraphFormat
                 fntName = .Range.Font.Name
                 'MsgBox (.Range.Text)
                 fntsize = .Range.Font.Size                                                    
                 
             
                 alnMent = .Range.ParagraphFormat.Alignment
                 shSj = .Range.ParagraphFormat.FirstLineIndent
                 'lineup1 = .Style.ParagraphFormat.LineUnitBefore
                 'lineup2 = .Style.ParagraphFormat.SpaceBefore
                 'linedo1 = .Style.ParagraphFormat.LineUnitAfter
                 'linedo2 = .Style.ParagraphFormat.SpaceAfter
                 
                 'fnt = .Range.Font
                 'pfmt = .Range.ParagraphFormat.LineSpacing
                 lineup1 = .Range.ParagraphFormat.LineUnitBefore
                 lineup2 = .Range.ParagraphFormat.SpaceBefore
                 linedo = .Range.ParagraphFormat.LineUnitAfter
                 linedo2 = .Range.ParagraphFormat.SpaceAfter
                 lnSpcrule = .Range.ParagraphFormat.LineSpacingRule
                 lineSpace = .Range.ParagraphFormat.LineSpacing
                 
                 .Style = ActiveDocument.Styles("正文")
                 
                 .Range.ListFormat.RemoveNumbers '清除自动编号的代码
                 .Range.Font = fnt
                 .Range.Font.Name = fntName
                 .Range.ParagraphFormat.Alignment = alnMent
                 
                 .Range.Font.Size = fntsize
                 '.Range.ParagraphFormat.LineSpacing = pfmt
                 If lineSpace < =1 Then
                    lineSpace = 1
                 End If
                 .Range.ParagraphFormat.LineSpacing = lineSpace
                 '.Range.ParagraphFormat = pfmt
                 .Range.ParagraphFormat.FirstLineIndent = shSj
    
                
    
                 .Range.ParagraphFormat.LineUnitBefore = lineup1
                 .Range.ParagraphFormat.SpaceBefore = lineup2
                 .Range.ParagraphFormat.LineUnitAfter = linedo1
                 .Range.ParagraphFormat.SpaceAfter = linedo2
                 .Range.ParagraphFormat.LineSpacingRule = lnSpcrule
                 .Range.ParagraphFormat.LineSpacing = lineSpace
    
                 
                 'End If
             End With
         Next
    
    
    
    
    
    
    
    
        '设置页面大小
        'With ActiveDocument.PageSetup
        '        .LineNumbering.Active = False
        '        .Orientation = wdOrientPortrait
        '        .TopMargin = CentimetersToPoints(3.7)
        '        .BottomMargin = CentimetersToPoints(3.5)
        '        .LeftMargin = CentimetersToPoints(2.6)
        '        .RightMargin = CentimetersToPoints(2.6)
       
        'End With
    
        
    
        
        With ActiveDocument.Styles("标题 1").Font
            .NameFarEast = "方正小标宋简体"
            .Size = 22
        End With
        With ActiveDocument.Styles("标题 1").ParagraphFormat
            .LeftIndent = CentimetersToPoints(0)
            .RightIndent = CentimetersToPoints(0)
            .SpaceBefore = 0
            .SpaceBeforeAuto = False
            .SpaceAfter = 0
            .SpaceAfterAuto = False
            .LineSpacingRule = wdLineSpaceSingle
            .Alignment = wdAlignParagraphCenter
            .WidowControl = True
            .KeepWithNext = False
            .KeepTogether = False
            .PageBreakBefore = False
            
        End With
    
        With ActiveDocument.Styles("标题 1")
            .AutomaticallyUpdate = False
            .BaseStyle = "正文"
            .NextParagraphStyle = "标题 2"
        End With
    
    
    
        ActiveDocument.Paragraphs(1).Range.Select    
        Selection.Style = ActiveDocument.Styles("标题 1")
    
        
        For i = 1 To 10 '循环十次,替换空格
            Selection.WholeStory
            Selection.Find.ClearFormatting
            Selection.Find.Replacement.ClearFormatting
            With Selection.Find
                .Text = "章  "
                .Replacement.Text = "章 "
                .Execute Replace:=wdReplaceAll
            End With
        Next i
        
        '添加分页
        Selection.EndKey Unit:=wdStory
        Selection.InsertBreak Type:=wdPageBreak
    
    
        
    End Sub
    

     

    展开全文
  • 选择要设置为标题一格式的标题(图红色标记),然后在“开始”-》“段落”标签找到“多级列表”按钮(图红色标记),点击该按钮出现全部多级列表框,在“列表选择样式,如下图: 第二步:设置...

    一、设置样式,编号,标题

    第一步:设置新的格式前最好先清除原来的格式,方法是选择要清除格式的内容,然后点击右键在“样式”下选择“清除格式”菜单。

    选择要设置为标题一格式的标题(图中红色标记),然后在“开始”-》“段落”标签中找到“多级列表”按钮(图中红色标记),点击该按钮出现全部多级列表框,在“列表库”中选择样式,如下图:

    第二步:设置同级标题很简单,选中刚才设置的标题一标题,然后点击“开始”-》“剪贴板”标签中的“格式刷”按钮,把其他为标题一格式的标题刷一遍,此时左边的“导航也会自动生成”,如下图:

    第三步:设置标题二格式的标题,选中要设置为标题二的标题,选择“开始”-》“样式”中的“标题2”样式,此时会自动生成标题二样式的标题,并自动添加编号2.1,如下图:

    第四步:设置标题二格式的其他标题,参考第二步,设置标题三等其他标题样式,参考第三步。

    二、为图片设置编号:

    第一步:选中图片,点击右键,选择“插入题注...”菜单,弹出“题注”对话框。

    在“题注”对话框中点击“新建标签...”按钮,输入标签名称,如“”,点击“确定”按钮。

    在“题注”对话框中点击“编号...”按钮,弹出“题注编号”对话框。在“包含章节号”复选框上画勾,然后点击“确定”按钮返回“题注”对话框,再点击“确定”按钮,返回word中。此时图片下面出现“ 21”字体,然后可以再自己添加图片说明,如“ 21 第一个图片”,如下图:

    第二步:在下一个图片上点击右键,选择“插入题注...”按钮,弹出“题注”对话框,如下图:

    (在这个图中我们看到有很多选项,如“标签”,“位置”等,自己点开看看可以灵活设置)

    第三步:直接点击“确定”按钮,效果如下图:

    同样还可以在插入的编号“图 2-2”后面加入其它的图片说明。

    -------------------------------------------------------------------------------------------------------------------------

    最后在这个过程中每个步骤还可以设置很多样式,根据这个最基本的步骤可以自己灵活设置各种想要的样式。

    展开全文
  • 关键在于将“级别链接到样式”,这里选择样式库的标题1”。如此便实现了“标题1”自动编号。 再设置“标题2”,关键在于 1)<输入编号格式>栏目,要将内容清空后,点击“包含级别编号来自(D)”...

    word自带了包含多级标题的样式,如下图:
    在这里插入图片描述

    如何让段落在应用样式“标题”后,能形成如下效果,并自动编号?

    在这里插入图片描述

    1. 在【开始】选项卡中,点击<多级列表> - <定义新的多级列表>
      在这里插入图片描述
    2. 先设置“标题1”
      在这里插入图片描述
      关键在于将“级别链接到样式”,这里选择样式库的“标题1”。如此便实现了“标题1”的自动编号。
    3. 再设置“标题2”,关键在于
      1)<输入编号的格式>栏目中,要将内容清空后,点击“包含的级别编号来自(D)”中选上级别1,如此便能实现继承上一级别的编号,实现自动编号;
      2)再点击“此级别的编号样式”,选择本级别的编号样式:1.2.3…,如此能实现本级的自动编号,组合后能实现1.1、1.2、1.3或2.1、2.2类似这样的自动编号
      在这里插入图片描述
    4. 其他标题的类似。。。
      在这里插入图片描述

    注意一定要一次性完成所有标题样式的链接配置!否则需要重新来过

    展开全文
  • 标题编号前,格式很乱我们以设置三级标题为例,各级标题格式分别为:1 1.1 1.1.1 第一步:在“开始”选项下,选择“多级列表”,在列表库中找到对应样式,这里是第二个。选择多级列表第二步:在“多级列表”最下面,...

    Word文档排版时,多个层级的标题编号很常见,手动编号不仅工作量大,容易乱,而且内容修改时,往往很多编号都要跟着改,很不方便。多层级标题自动编号涉及word中两个功能:多级列表和样式。

    fc0465aec3e86c237be74b6401882860.png

    标题编号前,格式很乱

    我们以设置三级标题为例,各级标题格式分别为:1 1.1 1.1.1

    第一步:在“开始”选项下,选择“多级列表”,在列表库中找到对应样式,这里是第二个。

    e2e7652bbe931acc66d449523c200447.png

    选择多级列表

    第二步:在“多级列表”最下面,选择“定义新的多级列表(D)”,弹出新的设置对话框,点击对话框最下面的“更多”。

    496bcfc2d9f6e7f3768ec3a78e7085ae.png

    定义新的多级列表(D)

    469ca18aa9da04394e66a641aa96e56d.png

    第三步:在最左边“单击要修改的级别”处选“1”,最右边“将级别链接到样式”处选“标题1”,“要在库中显示的级别”处选“级别1”。以上的意思是:在样式功能中,标题1是1级排版,标题序号为1,2,3,4.。。。。

    9b9bd0e8f6cd4494e43f0672224fc45f.png

    设置1级标题

    同样的方法设置2为标题2,级别2

    cb2fd4096e908c46c678aee2ac65b258.png

    设置2级标题

    3为标题3,级别3

    a0f03bc0b66774a29e7b6a67c3b3412f.png

    设置3级标题

    第四步:将鼠标放在正文一级标题处,点击“样式”中的“标题1”,则自动添加编号1。

    93c79f1ef76b004e4d02534f53a5ae49.png

    添加1级标题编号

    同理可以为二级标题,三级标题添加编号,最终效果如下。

    4f43f7b9c3a4697fa294f426fda9e4e3.png

    最终效果

    46b86214e5d472556019648ee25a065f.png

    最终效果

    假如我们把2.2.1及下面的内容删除,会发现原来2.2.2的标题自动变为了2.2.1,这样格式就再也不会乱了。

    展开全文
  • 前段时间有小伙伴问到Word自动生成目录问题。在此,再详述一下,让大家对目录有个更好理解和运用。01目录源问题比如,我们有下列一篇文章:文字有加粗有编号,貌似已经设置好一级标题和二级...请首先将样式库中...
  • 基于Word的论文多级标题与图表题注解决办法多级列表多级按钮定义新列表样式设置多级列表章节小节图注设置表注设置样式的应用图表排序应用总结附录如何在大纲去掉不需要文本取掉图片前小黑点 ...
  • docx,可以用来创建docx文档,包含段落、分页符、表格、图片、标题样式等几乎所有的word文档中能常用功能都包含了,这个包主要功能便是用来创建文档,相对来说用来修改功能不是很强大。 首先检查一下我们...
  • from docx.enum.style import WD_STYLE_TYPE # 样式库 from docx.enum.text import WD_PARAGRAPH_ALIGNMENT # 对齐式库 from docx.shared import Pt # 单独调整几个字样式 import os import time class ...
  • 比如,下面这个图就是HTML里的内容,我要把它提取出来写入到word里面,还要带上这本书的标题,给word命名。写好了就可以批量处理!!!是不是很妙o( ̄︶ ̄)o 还好朋友会用一个sitemapX工具,把网页中的目标路径都...
  • docx 读写 word 文件

    2020-01-30 15:30:59
    目录 安装: 写入: 读入: 安装: pip instsall python-docx 写入: # 数据写入 from docx import Document ...# 添加标题,其中'0'代表标题类型,共四种类型,具体可在Word的'开始'-'样式'查看 d...
  • 1.单击“开始”,“样式库” 2.右击导航窗格中的相应部位,在右击框中选择“升级”“降级” 3.最为简便的方法,使用shift+alt+左右方向键
  • python-docx包,这是一个很强大包,可以用来创建docx文档,包含段落、分页符、表格、图片、标题样式等几乎所有的word文档中能常用功能都包含了,这个包主要功能便是用来创建文档,相对来说用来修改功能不是...
  • pythondocx库的安装

    千次阅读 2019-11-07 21:45:00
    python-docx包,这是一个很强大包,可以用来创建docx文档,包含段落、分页符、表格、图片、标题样式等几乎所有的word文档中能常用功能都包含了,这个包主要功能便是用来创建文档,相对来说用来修改功能不是...
  • word2016标题序号变黑色竖线解决方法

    万次阅读 2018-10-10 21:09:36
    第一步:将黑块选中 若直接可以选中黑块(黑块变灰色)则进入第二步,不能直接选中的话将光标定位至黑块右侧,按键盘左方向键,...在弹出的页面中先选择列表库中的无列表 再点击定义新的多级列表,点击确认保存...
  • 有这样一个文档,它导航结构图如下所示,这些章节标题都设置好了样式和大纲级别,结构层次清晰易懂。一章内容一般由基本知识和自测题两部分构成。现在要求:1.把红框内章节保留在文档内形成一个新文档,以便对...
  • Word备忘

    2016-04-07 09:42:29
    新建word,点击多级列表,选择列表库中的1个,然后在点击多级列表,点击定义新的多级列表,这样新制作的多级列表会和之前选类似 点击更多,选择每一级列表的编号样式,选择将该级别链接到样式,库中级别等等 点击...
  • 打开word中的"段落"--"多级列表"--"定义新多级列表"--"单击要修改的级别"中选1--“将级别链接到样式”选择“标题1”(此步骤是将该级别和样式进行链接)--“在库中显示的级别”为“级别1”; 在“此级别的编号样式...
  • docx库的安装

    2020-04-26 08:51:42
    python-docx包,这是一个很强大包,可以用来创建docx文档,包含段落、分页符、表格、图片、标题样式等几乎所有的word文档中能常用功能都包含了,这个包主要功能便是用来创建文档,相对来说用来修改功能不是...
  • word的多级列表功能具有各级自动编号功能,非常适用于论文标题的编辑,经常写论文朋友可以做一个论文模板,供日常使用,... 在列表库中如下图所示选择第二行第三列图标:这时样式栏功能区快速样式栏内内...
  • 自动目录生成步骤:1、设置好样式选中文本,点击开始——样式——在样式库中选择合适格式。2、添加空白页设置好样式之后在标题前面添加相应空白页,添加方式如下:将光标定在标题前面,之后按快捷键Ctrl+Enter组合...
  • word2007版中,设置不同级别的标题在文档的编写中起到至关重要的作用。 首先选择“标题1”,会出现一个“■”的符号à选择“多级列表”,从列表库中选择一个样式,选择标题1,单击右键,点击“更新“标题1”以...
  • Hello,各位叨友们好呀!我是叨叨君~当我们在用...01设置标题样式设置标题之前,把文章整体编辑好,然后选中文本,点击开始——样式——在样式库中选择合适格式。注意,你自己加粗标颜色那种不叫标题,必须选中文...
  • Hello,各位叨友们好呀!...01设置标题样式设置标题之前,把文章整体编辑好,然后选中文本,点击开始——样式——在样式库中选择合适格式。注意,你自己加粗标颜色那种不叫标题,必须选中文字,点击W...
  •  (一)首先以文档“样式.docx”中的标题一”、“标题二”、“标题三”样式的格式替换“word.docx”文档中的同名样式; (二)将“word.docx”文档中“正文”样式的格式修改为首行缩进2个字符、仿宋、五号字; ...
  • word目录编号自动更新排版技巧

    千次阅读 2019-01-16 16:53:03
    2.选择“要修改级别”,选择1,在样式中,选择样式,级别1,可以对应使用“标题1”的样式,在库中选择显示级别,选择1级,在编号格式选择编号格式,在“位置”修改调整标题的位置。调整完毕后,再选择“...
  • 2、【级别链接到样式】级别1选择标题1,【要在库中显示级别】选择级别1,其它级别以此类推。 3、【包含级别】从1级分别选择(1级不可选),然后【此级别编号样式】选择相应样式(模式1,2,3…)。 4、起始编号...
  • 2、个性鼠标样式,默认是否看腻了? 3、1张底部大图显示。 4、有趣动画特效。 5、侧边栏预设了优美动听古风音乐,让你边阅读文章边陶醉不已。 基本功能: 1、首页、日志页、单页都有,边栏小工具有。 2、...
  • asp.net知识

    2015-06-18 08:45:45
    ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则表达式 delegate vs. event 我是谁?[C#] 表达式计算引擎 正式发布表达式计算引擎WfcExp V0.9(附源码) 运算表达式类的原理及其实现 #实现的18位身份证...

空空如也

空空如也

1 2 3 4
收藏数 77
精华内容 30
关键字:

word样式库中的标题样式