在投标或项目交付过程中,涉及多家供应商配合,通常情况各供应商都是在已有文档的基础上进行复制粘贴,导致样式多种多样,给后期调整工作带来极大困难,更兼很多样式带有各公司名称,给后期的督导或查重工作带来风险。
近期接触一个项目的交付文档,项目体量较大,页数在1700页左右,样式下拉后有两三页,各方汇总后最终样式如下:
图片格式:虽然在输出模版时会提出要求,要求按照要求对图片格式进行统一,便于最终合稿时统一调整,但合并的文件中图片格式往往格式不一,有图片、有正文、甚至文字环绕。同样也有图注格式不一的问题
表格格式:最终收集的合并文档,也会遇到表格格式错乱问题,导致标案人员会花费半天到一天的时间来调整表格和表注
已解决问题鉴于上面出现的问题,通过尝试,采用以下办法解决上述问题:(1)通过替换styles.xml文件的方式解决杂乱样式的问题。(2)通过运行宏命令的方式解决图片、图注、表格、表注的问题。
未解决问题通过尝试,不能解决正文统一选择问题,最后需要专门找人通过快捷键统一刷一下正文。
首先将样式杂乱的文件(test.docx)复制一份,选取前几页,同时新建word文档new.docx,复制选取页,切记带上所有的标题,同时拷贝图片、图注、表格、表注,成功示例如下:
关闭新创建的word文档(new.docx,需要为docx格式),用7zip打开。
7zip选择“打开压缩包”,双击其中的word文件夹,进入如下目录:
选取其中的styles.xml文件,复制到本地(用来替换杂乱word文件的样式文件)。关闭new.docx文件,用7zip软件打开样式杂乱的原始word文件(test.docx,同样进入word文件夹,进入后图示如下:
可以看出此处的styles.xml文件大小为278KB,第一次打开new.docx的styles.xml文件为45KB。删除此处的styles.xml文件(278KB),用45KB的styles.xml进行替换。替换完毕后关闭7zip软件,重新打开样式杂乱文件test.docx,可以看到样式已被替换如下:
通过上述步骤,能够将杂乱的样式替换为步骤一提取的标准样式,如果严格按照步骤一操作,标题格式也能够完整保留。可能出现的问题:(1)部分标题格式丢失,需要通过定义新的多级列表重新设置标题样式(2)图片、图注格式错乱,需要通过宏命令行执行,统一调整(3)表格、表注格式错乱,需要通过宏命令行执行,统一调整
标题复制不全的话,替换后的文件标题格式会错乱,需要通过定义新的多级列表重新编写样式,增加不必要的工作量。调整位置见下图:
涉及标题样式设计,需重新展开一个文档进行阐述,有心学习的话可以在网上查找相应的文档。
为解决此问题,需要执行宏命令进行实现,宏命令打开方式:在Word“文件-选项-自定义功能区”右侧“主选项卡”中勾选“开发者工具”,确定后即可在工具栏中看到“开发者工具”选项。
点击“宏”图标,输入宏名称,点击“创建”,进入代码编写界面。
图片格式调整示例输入“宏名”,点击创建按钮,已经有命令的话点击编辑进入命令行编辑界面,图片格式调整代码如下:
保存后运行,运行后显示运行中,程序自动对所有图片格式进行调整。如果点击运行后程序不运行,关闭编辑页,重新打开宏命令,双击宏名运行。
Sub 全部图片样式调整() For Each pic In ActiveDocument.InlineShapes pic.Select With Selection.ParagraphFormat .Alignment = wdAlignParagraphCenter '居中 .CharacterUnitFirstLineIndent = 0 '首行缩进转换为厘米 .FirstLineIndent = CentimetersToPoints(0) '设置首行缩进0厘米 .CharacterUnitLeftIndent = 0 '左侧缩进转换为厘米 .LeftIndent = CentimetersToPoints(0) '设置左侧缩进为0厘米 .CharacterUnitRightIndent = 0 '右侧缩进转换为厘米 .RightIndent = CentimetersToPoints(0) '设置右侧缩进为0厘米 .SpaceBeforeAuto = False '取消段前间距自动格式 .LineUnitBefore = 0 '段前间距转换为磅 .SpaceBefore = 0 '设置段前间距为0 .SpaceAfterAuto = False '取消段后间距自动格式 .LineUnitAfter = 0 '段后间距转换为磅 .SpaceAfter = 0 '设置段后间距为0 .LineSpacingRule = wdLineSpaceSingle '设置单倍行距 End With Next picEnd Sub
Sub 图注调整()Dim CK1, CK2 As Boolean'图片题注调整For Each pic In ActiveDocument.InlineShapes pic.Select Selection.MoveDown Count:=1 '光标到前一行 Selection.HomeKey '光标到行首 Selection.EndKey Extend:=wdExtend '光标到行尾以选择当前行 setParagraphStyle '设置段落字体格式Next picEnd SubSub setParagraphStyle() '字体设置 With Selection.Font .Size = "10.5 " '设置内容字号5号 .NameFarEast = "黑体" '中文黑体 .NameAscii = "黑体" '非中文黑体 End With '段落设置 With Selection.ParagraphFormat .Alignment = wdAlignParagraphCenter '居中 .CharacterUnitFirstLineIndent = 0 '首行缩进转换为厘米 .FirstLineIndent = CentimetersToPoints(0) '设置首行缩进0厘米 .CharacterUnitLeftIndent = 0 '左侧缩进转换为厘米 .LeftIndent = CentimetersToPoints(0) '设置左侧缩进为0厘米 .CharacterUnitRightIndent = 0 '右侧缩进转换为厘米 .RightIndent = CentimetersToPoints(0) '设置右侧缩进为0厘米 .SpaceBeforeAuto = False '取消段前间距自动格式 .LineUnitBefore = 0 '段前间距转换为磅 .SpaceBefore = 0 '设置段前间距为0 .SpaceAfterAuto = False '取消段后间距自动格式 .LineUnitAfter = 0 '段后间距转换为磅 .SpaceAfter = 0 '设置段后间距为0 .LineSpacingRule = wdLineSpaceMutiple '设置多倍行距 .LineSpacing = LinesToPoints(1.5) '设置1.5倍行距 End WithEnd Sub
Sub 全部表格样式调整() For Each tempTable In ActiveDocument.Tables With tempTable '.AutoFitBehavior (wdAutoFitWindow) '表格与页面同宽(谨慎使用,可能会打乱原本调整好的列宽) '框线设置 .Borders.OutsideLineStyle = wdLineStyleSingle '外边框单线 .Borders.OutsideLineWidth = wdLineWidth075pt '外边框加粗(0.75磅) .Borders.InsideLineStyle = wdLineStyleSingle '内边框单线 .Borders.InsideLineWidth = wdLineWidth075pt '内边框细线(0.75磅) '字体设置 With .Range.Font .Size = "10.5" '设置表格内容字号5号 .NameFarEast = "宋体" '表格中文宋体 .NameAscii = "Times New Roman" '表格非中文新罗马 End With '段落格式设置 .Rows.Alignment = wdAlignRowCenter '表格整体居中 .Select Selection.Rows.AllowBreakAcrossPages = True '所有行允许跨行断页 Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter '表格内容垂直居中 With Selection.Range.ParagraphFormat '.Alignment = wdAlignParagraphCenter '表格内容水平居中 .CharacterUnitFirstLineIndent = 0 '首行缩进转换为厘米 .FirstLineIndent = CentimetersToPoints(0) '设置首行缩进0厘米 .CharacterUnitLeftIndent = 0 '左侧缩进转换为厘米 .LeftIndent = CentimetersToPoints(0) '设置左侧缩进为0厘米 .CharacterUnitRightIndent = 0 '右侧缩进转换为厘米 .RightIndent = CentimetersToPoints(0) '设置右侧缩进为0厘米 .SpaceBeforeAuto = False '取消段前间距自动格式 .LineUnitBefore = 0 '段前间距转换为磅 .SpaceBefore = 0 '设置段前间距为0 .SpaceAfterAuto = False '取消段后间距自动格式 .LineUnitAfter = 0 '段后间距转换为磅 .SpaceAfter = 0 '设置段后间距为0 .LineSpacingRule = wdLineSpaceMutiple '设置多倍行距 .LineSpacing = LinesToPoints(1.25) '设置1.25倍行距 .WordWrap = False '允许西文在单词中间换行 End With '表头设置 '.Rows.HeadingFormat '重复标题行 .Cell(1, 1).Select With Selection .SelectRow .ParagraphFormat.KeepWithNext = True '与下段同页 .Borders(wdBorderBottom).LineWidth = wdLineWidth075pt '表头底边加粗(0.75磅) .Range.ParagraphFormat.Alignment = wdAlignParagraphCenter '表头内容居中 .Cells.VerticalAlignment = wdCellAlignVerticalCenter '表头内容垂直居中 With .Range.Font '表头文字格式 .NameFarEast = "黑体" '表头中文黑体 .NameAscii = "黑体" '表头非中文黑体 .Bold = False '表头文字不加粗 End With End With End With Next tempTableEnd Sub