第三方软件交互

Office软件辅助

因软件更新较快,部分文档内容与软件最新版本有所出入,请知悉。

本模块为测试状态,欢迎反馈问题。

对当前Office软件窗口执行VBA宏代码、对文档或选定对象设置格式等。

特别感谢网友@Zetalpha,执行VBA脚本功能主要参考Zetalpha的子程序实现。

如果您在使用中遇到什么问题,欢迎通过官网讨论区反馈。

提示:

  • 本步骤使用低权限方式运行,不能用于使用“管理员身份”启动的Office或wps程序。


执行VBA代码

前置条件:

  • Office 系列软件需要开启【信任对 VBA 工程对象模型的访问】选项。
  • WPS 软件需要安装VBA模块,并开启【信任对于“Visual Basic项目”的访问】选项。
  • 以上选项开启方法请参考本文

注意事项:

  • WPS产品因为其版本众多,每个版本所包含的组件不同,兼容性差异较大,不一定能正常运行。
  • 因为底层COM接口的限制,如果同时开启了多个同名进程,可能会获取到错误的活动文档。
  • Excel 软件执行VBA代码后,将会丢失撤销(undo)历史,无法进行撤销操作。因此,请先备份好重要数据,再使用VBA代码。


参考演示:录制宏并转换为动作

参数


【应用程序】选择要执行VBA代码的程序。

支持如下选项:

【VBA宏名称或代码】

  • 如需执行文档中已有的宏,填写宏的名称。
  • 否则填写完整的宏代码。通常是这样的格式:
Sub 宏名称()
    '宏代码
End Sub

您可以在Excel、Word中录制宏,然后将代码修剪后(录制的代码经常会有一些没有什么用的部分)复制到动作中使用。

【等待执行结束】

是否等待执行结束后再继续后面的步骤。

如果不等待,在VBA代码执行中遇到的问题将不会有提示和报错。

【失败后停止动作】

执行出错后是否停止动作的运行。

设置格式、设置对象属性

概述:

  • 本功能有点复杂,需要手写对象名称。需要您对VBA对象模型有一定的了解,并且善于查阅微软官方文档以了解各个对象类型的属性和方法。
  • 用于对Word/WPS文字、PowerPoint/WPS演示的特定对象设置属性(如对选中文字设置字体、段落格式)。本功能暂不支持Excel/WPS表格
  • 本功能不需要在Office软件中开启【信任对 VBA 工程对象模型的访问】选项。
  • 可参考通过录制宏得到的代码。

参数


【应用程序】

选择程序类型。目前不支持Excel和WPS表格。

【格式设置/对象属性赋值】

用于设置对象属性值的代码。其语法如下:

  • 顶格写对象名称。(支持的对象请参考本文后续章节说明)
  • 通过缩进方式指定要设置的属性(以及下一级属性)。也可以将多个层级的属性名合并在一行,如.Font.Fill.ForeColor.RGB = #FF0000(设置字体的颜色)。缩进字符的数量没有限制,只要同一级别的内容缩进位置相同即可。
  • 通过.属性名 = 属性值的方式赋值。
  • 对象名、属性名大小写不敏感。
  • 每个对象类型所支持的属性,可以参考VBA文档,或通过查看录制宏所生成的代码了解。
  • 也可以通过.方法名: 参数1,参数2,....的形式调用参数类型明确的简单方法。
  • 对可枚举类型(IEnumerable)类型的对象,可以使用.*表示其每个元素。用于对该枚举对象的每个元素调用相同的处理。
  • 可以在行的开始使用//注释一行
  • 布尔类型属性,可以使用!表示对当前值取反。示例动作

注:本功能通过c#的反射机制查找属性和方法名称,并根据其类型定义转换属性值。有的参数类型可能无法正常转换。

【等待执行结束】

是否等待执行结束后再继续后面的步骤。如果不等待,将会忽略所遇到的任何错误。

Word 支持说明

所支持的对象列表

对象名称

说明

文档链接

Application

Word应用程序对象。

VBA

Doc

当前活动文档。

为Application.ActiveDocument的别名。

VBA

PageSetup

当前文档的页面设置。

为Application.ActiveDocument.PageSetup 的别名。

VBA

Selection

当前选择的内容。

为Application.Selection的别名。

VBA

Selection.Font

当前选择内容的字体格式设置。

为Application.Selection.Font的别名。

VBA

Selection.P

当前选择内容的段落格式设置。

为Application.Selection.ParagraphFormat的别名。

VBA

Styles.样式名

如:styles.标题 1

某个样式。

用于更新文档中某个样式的字体、段落等设置。

VBA

StyleByText

根据段落文本内容设置段落的样式。用于自动排版功能中,识别标题段落并自动设置成对应的标题样式。

见本文后面部分。

Styles.样式名 :设置样式的文字和段落格式

样式名可以使用Word的内置样式名(如wdStyleHeading1对应于“标题 1”)或中文样式名(如“标题 1”)。注意,样式名中间的空格需要保留,不然无法匹配。

示例:

Styles.正文
	.Font
		.Name = "仿宋"
		.Size = 16
		.Color = wdColorAutomatic
	.ParagraphFormat
		.Alignment = wdAlignParagraphLeft
		.LineSpacingRule = wdLineSpaceExactly
		.LineSpacing = 29
		// 首行缩进
		.CharacterUnitFirstLineIndent = 0
		.MirrorIndents = 0
		.SpaceBefore = 0
		.SpaceAfter = 0

Styles.标题 1
	.Font
		.Name = "黑体"
		.Size = 16

Styles.标题 2
	.Font
		.Name = "楷体"
		.Size = 16
		
Styles.标题 3
	.Font
		.Name = "仿宋"
		.Size = 16

StyleByText :根据文字内容设置段落样式

公文排版标准对各级别标题的样式做了规定。 因此,可以根据段落的文字内容倒推判断其所对应的标题级别,。设置方法:

StyleByText
	.样式名1 = "正则表达式(C#语法)"
	.样式名2 = "正则表达式(C#语法)"
	...更多规则

示例:

StyleByText
	.标题 1 = "^\s*[一二三四五六七八九十]{1,3}、[^\r]*"
	.标题 2 = "^\s*([一二三四五六七八九十]{1,3})[^\r]*"
	.标题 3 = "^\s*\d+[\.]([^。\\r:])*[。]{0,1}"
	.标题 4 = "^\s*(\d+)([^。\\r:])*"

Selection 选中区域

设置选中内容的样式:

selection
	.style = "标题 1"


清除选中内容的格式 (结尾的冒号表示调用方法):

Selection
	.ClearFormatting:


设置高亮显示颜色(可选值):

selection
	.Range.HighlightColorIndex = wdYellow

PageSetup 页面设置

PageSetup
        .LineNumbering.Active = False
        .Orientation = wdOrientPortrait
        .TopMargin =  CentimetersToPoints(2)
        .BottomMargin = CentimetersToPoints(3)
        .LeftMargin = CentimetersToPoints(4)
        .RightMargin = CentimetersToPoints(5)
        .Gutter = CentimetersToPoints(0)
        .HeaderDistance = CentimetersToPoints(1.5)
        .FooterDistance = CentimetersToPoints(1.75)
        .PageWidth = CentimetersToPoints(21)
        .PageHeight = CentimetersToPoints(29.7)
        .FirstPageTray = wdPrinterDefaultBin
        .OtherPagesTray = wdPrinterDefaultBin
        .SectionStart = wdSectionNewPage
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .VerticalAlignment = wdAlignVerticalTop
        .SuppressEndnotes = False
        .MirrorMargins = False
        .TwoPagesOnOne = False
        .BookFoldPrinting = False
        .BookFoldRevPrinting = False
        .BookFoldPrintingSheets = 1
        .GutterPos = wdGutterPosLeft
        .LayoutMode = wdLayoutModeLineGrid

注:上面的代码主体是通过录制宏得到的。

长度/尺寸数值可以直接使用VBA代码中的CentimetersToPoints(厘米数),也可以使用5.2cm这样的格式。如使用下面的代码设置一个常规公文文档的页边距:

PageSetup
        .TopMargin = 3.7cm
        .BottomMargin = 3.5cm
        .LeftMargin = 2.8cm
        .RightMargin = 2.6cm

PowerPoint 支持说明

所支持的对象列表

对象名称

说明

文档链接

Application

PowerPoint应用程序对象。

VBA

Presentation

当前活动动幻灯片。

为Application.ActivePresentation的别名。

VBA

PageSetup

当前活动幻灯片的页面设置。

为Application.ActivePresentation.PageSetup 的别名。

VBA

Selection

当前选择的内容。

为Application.ActiveWindow.Selection的别名。

VBA

Selection.Font

当前选择内容的字体格式设置。

为Application.Selection.TextRange2.Font的别名。

VBA

Selection.P

当前选择内容的段落格式设置。

为Application.Selection.TextRange2.ParagraphFormat的别名。

VBA

selection.shapes

当前所选中的图形。为Application.Selection.ShapeRange的别名。

VBA

示例

设置幻灯片大小为A4纸张,水平方向:

pagesetup
  .SlideSize = ppSlideSizeA4Paper
  .Slideorientation = msoOrientationHorizontal

设置选中对象的文字字体

selection.font
		.name = "黑体"
		.size = 20
		.fill.forecolor.rgb = #FF0000

选中的图形快速对齐到左半屏:

selection.shapes
	.left = 0
	.top = 0
	.width = 50%
	.height = 100%

注:ShapeRange对象的Left、Top、Width、Height 支持使用百分比数字指定位置和大小。

相对于幻灯片横向分布选中的图形(调用ShapeRange.Distribute方法):

selection.shapes
	.Distribute: msoDistributeHorizontally, msoTrue


示例动作

获取ProgId

主要用于编写同时兼容Office和WPS的c#代码。

当“应用程序”参数选择“xxxx 或 xxxx”时,模块会判断前台进程名称返回对应的ProgID。

示例动作:

更新历史

  • 20221116 1.36.7
    • 增加“获取ProgId”操作类型;
    • 设置对象属性:对布尔类型支持使用!对当前值取反。


语雀在语雀上查看