ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 977|回复: 3

[求助] 如何根据EXCEL表中设定格式,调整WORD文档的格式

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-11-8 14:54 | 显示全部楼层 |阅读模式
感谢413191246se老师的多次指点,老师的《通用模板宏》中关于WORD文档格式的调整宏已经理解的差不多了。我在想,如果将对WORD文档的调整在EXCEL文档中设定,然后在WORD中通过宏调用这个EXCEL表格,按表格里的设定编制代码,这样就会非常方便。但这样处理涉及在WORD中调取EXCEL文件内容,涉及设定数组变量以存在EXCEL文件中的各项设定,这超出了自己的能力了,故在此求助,请大神出手相助。






QQ截图20191108144600.png

WORD文档处理表.zip

8.73 KB, 下载次数: 2

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-11 14:47 | 显示全部楼层
     请大侠出手相助。
     这几天在网上找了不少EXCEL表格与WORD之间的转换,但多是在ECXEL中编写的代码读取WORD文件的内容,而我这里的思路是在WORD文档中编制的代码读取EXCEL表格里的内容,然后根据这个读取的内容去调整WORD文档的格式。所以百度解决不了这个问题。
    我现在的问题是,如何在WORD中打开并读取EXCEL文件中的内容,请大侠出手,帮忙解决这一个难点,剩下的我自己可以处理。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-14 12:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
通过查找老师们的代码,写出了自己的代码。请大侠们指正。
1、由于对代码的理解不到位,可能有些代码是多余的,请帮助精简优化。
2、还有2个问题没有解决,请高手指点。     一是:我在EXCEL表格中设定的“(1)”,本想是将文档中带括号的进行处理,但实际将文档中的“1.”、“2.”进行了处理。不知道代码的什么地方出现了问题。
    二是EXCEL文件在后台打开,似乎没有完全关闭,每运行一次宏,就会打开一个EXCEL进程,导致必须将EXCEL文件设定为共享模式,才能进行正常的操作。

Sub A123()
Dim Myname, MySize, MyColor, MyAlignment, MyLineUnitBefore, MyLineUnitAfter ', MyCharacterUnitFirstLineIndent
Application.ScreenUpdating = False
Dim mytable, myFirstRow As Range
Dim strHuzhu As String
Dim strZhuzhi As String
Dim AppExcel As Excel.Application, Wk As Excel.Workbook, Wksh As Excel.Worksheet

'以下操作打开一个Excel文件***
With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = False '单选择
    .Filters.Clear '清除文件过滤器
    .Filters.Add "Excel Files", "*.xls;*.xlw;*.xlsx"
    .Filters.Add "All Files", "*.*" '设置两个文件过滤器
    If .Show = -1 Then 'FileDialog 对象的 Show 方法显示对话框,并且返回 -1(如果您按 OK)和 0(如果您按 Cancel)。
        myfilepath = .SelectedItems(1)
        Else
        Exit Sub
    End If
End With
Set AppExcel = CreateObject("Excel.Application")
Set Wk = AppExcel.Workbooks.Open(myfilepath)
Set Wksh = Wk.Sheets(1)

'以下操作删除WORD文档的空行、空白区域
Dim objFind As Find
Set objFind = ActiveDocument.Content.Find
objFind.Execute Wrap:=wdFindContinue, MatchWildcards:=True, findtext:="^13{2,}", replacewith:="^p", Replace:=wdReplaceAll '删除空行
objFind.Execute Wrap:=wdFindContinue, MatchWildcards:=False, findtext:="^w", replacewith:="", Replace:=wdReplaceAll
'^w(必须是小写)替换非空白区域,可将全角空格、半角空格、制表符空格全部删除,但需要在非通配符情况下使用,所以需要设置 MatchWildcards:=False

For i = 2 To 10
    '以下读EXCEL文件中设定的取格式*****
    Mytext = Wksh.Range("A" & i)    '从EXCEL文件中取得搜索关键字
    If Len(Mytext) = 0 Then GoTo AAA  '如果搜索关键字是空的,则跳出循环
    TT = ""
    Myname = Wksh.Range("H" & i).Text
    MyBold = IIf(Wksh.Range("K" & i).Text = "是", True, False)
    MySize = Wksh.Range("I" & i).Text
    Select Case Wksh.Range("J" & i).Text
        Case Is = "黑"
        MyColor = wdColorBlack
        Case Is = "红"
        MyColor = wdColorRed
        Case Is = "蓝"
        MyColor = wdColorBlue
    End Select
    MyLineUnitBefore = Wksh.Range("L" & i).Text '段前行数
    MyLineUnitAfter = Wksh.Range("M" & i).Text '段后行数
    MyCharacterUnitFirstLineIndent = Wksh.Range("G" & i).Text '行首空格

    Select Case Wksh.Range("F" & i).Text
        Case Is = "左对齐"
        MyAlignment = wdAlignParagraphLeft
        Case Is = "居中"
        MyAlignment = wdAlignParagraphCenter
        Case Is = "右对齐"
        MyAlignment = wdAlignParagraphRight
    End Select

    '以下根据EXCEL文件中设定,调整WORD文档的格式**
    If Wksh.Range("A" & i).Text = "正文" Then
        Selection.WholeStory
        With Selection ' 全文总基调
            With .ParagraphFormat
                If MyLineUnitBefore <> "" Then .LineUnitBefore = MyLineUnitBefore '返回或设置指定段落的段后间距(以网格线为单位)。
                If MyLineUnitAfter <> "" Then .LineUnitAfter = MyLineUnitAfter '返回或设置指定段落的段前间距(以网格线为单位)。
                If MyCharacterUnitFirstLineIndent <> "" Then .CharacterUnitFirstLineIndent = MyCharacterUnitFirstLineIndent '行首缩进
                If MyAlignment <> "" Then .Alignment = MyAlignment       '对齐方式

                .OutlineLevel = wdOutlineLevelBodyText
                .LeftIndent = CentimetersToPoints(0)
                .RightIndent = CentimetersToPoints(0)
                .SpaceBefore = 0  '段前0行×5=0 ,但似乎不起作用
                .SpaceAfter = 0   '段后0行×5=0,但似乎不起作用
                .FirstLineIndent = CentimetersToPoints(0.35)
                '.SpaceBeforeAuto = False  '自动设置段前空行,单位:镑
                '.SpaceAfterAuto = False  '自动设置段后空行,单位:镑
                .LineSpacingRule = wdLineSpaceSingle
                '段落行距:wdLineSpace1pt5、wdLineSpaceAtLeast、wdLineSpaceDouble、wdLineSpaceExactly、wdLineSpaceMultiple、wdLineSpaceSingle
                .WidowControl = False  '
                .KeepWithNext = False  '与下段同页,本项和下一项去掉勾选,可标题行首的黑点不显示。
                .KeepTogether = False  '段中不分页
                .PageBreakBefore = False  '如果该属性值为 True,则在指定段落前插入分页符。
                .NoLineNumber = False  '如果该属性值为 True,则取消指定段的行号。
                .Hyphenation = True  '
                .CharacterUnitLeftIndent = 0  
                .CharacterUnitRightIndent = 0 。
                .MirrorIndents = False
                .TextboxTightWrap = wdTightNone  '
                .AutoAdjustRightIndent = True
                .DisableLineHeightGrid = False                    .FarEastLineBreakControl = True  
                .WordWrap = True
                .HangingPunctuation = True
                .HalfWidthPunctuationOnTopOfLine = False  
                .AddSpaceBetweenFarEastAndAlpha = True
                .AddSpaceBetweenFarEastAndDigit = True
                .BaseLineAlignment = wdBaselineAlignAuto
             End With
            With .Font
                If Myname <> "" Then .Name = Myname
                If MyBold <> True Or False Then .Bold = MyBold
                If MySize <> "" Then .Size = MySize
                If MyColor <> "" Then .Color = MyColor
            End With
        End With

        Else
            If InStr("章节条", Mytext) <> 0 Then   '如果搜索关键字中包含了“章/节/条”之一
                TT = "第[一二三四五六七八九十百]@" & Mytext
                ElseIf InStr(Mytext, "一") Then
                TT = Replace(Mytext, "一", "[一二三四五六七八九十百]{1,5}")
                Else
                TT = Replace(Mytext, "1", "[1234567890]{1,3}")
            End If
            If Wksh.Range("E" & i).Text = "是" Then
                TT = "^13" & TT   '处理是否要求从段落开头匹配
                Else
                TT = "[^13。;,”!:]{1}" & TT
            End If
            If Wksh.Range("D" & i).Text = "是" Then TT = TT & "*[。;]"    '处理是否要求拓展
            With Selection
            .HomeKey Unit:=wdStory
            With .Find
                .ClearFormatting
                .Text = TT '"第[一二三四五六七八九十百]@" & Wksh.Range("A" & i).Text
                .Forward = True
                .MatchWildcards = True
                Do While .Execute               
                    With .Parent                 
                        .MoveStart      
                        If Wksh.Range("N" & i).Text = "是" Then .InsertAfter Text:=" " '在找到的串后面加上两个空格
                        If Wksh.Range("C" & i).Text = "是" Then   '如果是整个段落字体调整
                            With .Paragraphs(1).Range.ParagraphFormat    ' .Paragraphs(1)应当理解为所找到区域的第一段
                                If MyLineUnitBefore <> "" Then .LineUnitBefore = MyLineUnitBefore '返回或设置指定段落的段后间距(以网格线为单位)。
                                If MyLineUnitAfter <> "" Then .LineUnitAfter = MyLineUnitAfter '返回或设置指定段落的段前间距(以网格线为单位)。
                                If MyCharacterUnitFirstLineIndent <> "" Then .CharacterUnitFirstLineIndent = MyCharacterUnitFirstLineIndent '行首缩进
                                If MyAlignment <> "" Then .Alignment = MyAlignment     '对齐方式
                            End With
                            With .Paragraphs(1).Range.Font
                                If Myname <> "" Then .Name = Myname
                                If MyBold <> True Or False Then .Bold = MyBold
                                If MySize <> "" Then .Size = MySize
                                If MyColor <> "" Then .Color = MyColor
                            End With
                            Else '只对查找部分调整字体
                            With .Font
                                If Myname <> "" Then .Name = Myname
                                If MyBold <> "" Then .Bold = MyBold
                                If MySize <> "" Then .Size = MySize
                                If MyColor <> "" Then .Color = MyColor
                            End With
                        End If
                        .Start = .End   
                  End With
                Loop
            End With
        .HomeKey Unit:=wdStory
        End With
    End If
AAA:
Next


'操作退出excel文件
AppExcel.Quit
Set Wksh = Nothing
Set Wk = Nothing
Set AppExcel = Nothing
Application.ScreenUpdating = True
End Sub




TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-17 09:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
没有想到这个网站这么沉闷,求助石沉大海。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 02:57 , Processed in 0.041015 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表