宏与自动化 #
宏概念 #
什么是宏 #
宏定义:
宏:
├── 一系列操作的记录
├── 可重复执行的命令集
├── 自动化文档处理
└── 提高工作效率
宏的作用:
├── 自动执行重复操作
├── 批量处理文档
├── 自定义功能
├── 扩展 Writer 能力
└── 节省时间和精力
宏的类型:
├── 录制宏
│ └── 记录操作步骤
├── 编写宏
│ └── 使用 Basic 语言编写
└── 导入宏
└── 使用他人编写的宏
录制宏 #
录制宏步骤 #
录制宏:
步骤:
1. 工具 → 宏 → 录制宏
2. 执行要录制的操作
3. 点击"停止录制"
4. 保存宏
│ ├── 输入宏名称
│ ├── 选择保存位置
│ └── 确定
录制注意事项:
├── 操作要准确
├── 避免多余操作
├── 鼠标操作可能不被记录
├── 尽量使用键盘操作
└── 录制前先练习
可录制操作:
├── 文本输入
├── 格式设置
├── 插入对象
├── 菜单命令
└── 快捷键操作
运行宏 #
运行宏:
方法一:宏对话框
├── 工具 → 宏 → 运行宏
├── 选择宏
├── 点击"运行"
└── 执行宏
方法二:工具栏
├── 添加宏按钮到工具栏
├── 点击按钮运行
└── 快速执行
方法三:快捷键
├── 为宏分配快捷键
├── 按快捷键运行
└── 最快捷方式
方法四:菜单
├── 添加宏到菜单
├── 点击菜单运行
└── 方便访问
管理宏 #
宏管理:
打开宏管理器:
├── 工具 → 宏 → 管理宏
└── 或工具 → 宏 → 组织宏
宏管理器功能:
├── 新建
│ └── 创建新宏
├── 编辑
│ └── 编辑宏代码
├── 删除
│ └── 删除宏
├── 运行
│ └── 运行宏
└── 重命名
└── 重命名宏
宏保存位置:
├── 我的宏
│ └── 个人宏库
├── LibreOffice 宏
│ └── 系统宏
└── 当前文档
└── 文档内宏
编写宏 #
LibreOffice Basic 简介 #
LibreOffice Basic:
基本概念:
├── Basic 语言
├── LibreOffice 脚本语言
├── 类似 VBA
└── 功能强大
基本语法:
├── 变量声明
│ └── Dim variable As Type
├── 条件语句
│ └── If...Then...Else...End If
├── 循环语句
│ └── For...Next, Do...Loop
└── 过程和函数
└── Sub...End Sub, Function...End Function
数据类型:
├── Integer - 整数
├── Long - 长整数
├── Single - 单精度浮点
├── Double - 双精度浮点
├── String - 字符串
├── Boolean - 布尔值
└── Variant - 变体
宏编辑器 #
打开宏编辑器:
方法一:宏管理器
├── 工具 → 宏 → 管理宏
├── 选择宏
├── 点击"编辑"
└── 打开编辑器
方法二:直接打开
├── 工具 → 宏 → 组织宏 → Basic
├── 选择宏
├── 编辑
└── 打开编辑器
编辑器功能:
├── 代码编辑
├── 语法高亮
├── 自动完成
├── 调试功能
│ ├── 断点
│ ├── 单步执行
│ └── 查看变量
└── 运行宏
常用宏示例 #
简单宏示例:
示例 1: 插入日期
```basic
Sub InsertDate
Dim oDoc As Object
Dim oText As Object
Dim oCursor As Object
oDoc = ThisComponent
oText = oDoc.getText()
oCursor = oText.createTextCursor()
oText.insertString(oCursor, Date(), False)
End Sub
示例 2: 格式化选中文字
Sub FormatSelected
Dim oDoc As Object
Dim oSelection As Object
oDoc = ThisComponent
oSelection = oDoc.getCurrentSelection()
If Not IsNull(oSelection) Then
oSelection(0).CharWeight = com.sun.star.awt.FontWeight.BOLD
oSelection(0).CharColor = RGB(255, 0, 0)
End If
End Sub
示例 3: 批量替换
Sub BatchReplace
Dim oDoc As Object
Dim oReplace As Object
oDoc = ThisComponent
oReplace = oDoc.createReplaceDescriptor()
oReplace.setSearchString("旧文本")
oReplace.setReplaceString("新文本")
oDoc.replaceAll(oReplace)
End Sub
## 宏与文档
### 文档对象模型
LibreOffice 对象模型:
主要对象: ├── ThisComponent │ └── 当前文档对象 ├── Text │ └── 文档文本对象 ├── TextCursor │ └── 文本光标 ├── Paragraphs │ └── 段落集合 ├── Tables │ └── 表格集合 └── 其他对象
常用属性: ├── String - 文本内容 ├── CharFontName - 字体名称 ├── CharHeight - 字号 ├── CharWeight - 粗细 ├── CharColor - 颜色 └── 更多属性
常用方法: ├── getText() - 获取文本对象 ├── createTextCursor() - 创建光标 ├── insertString() - 插入文本 ├── getLength() - 获取长度 └── 更多方法
### 操作文档内容
文档操作示例:
获取文档对象:
Dim oDoc As Object
oDoc = ThisComponent
获取选中文本:
Dim oSelection As Object
oSelection = oDoc.getCurrentSelection()
If oSelection.getCount() > 0 Then
Dim oText As String
oText = oSelection.getByIndex(0).getString()
End If
插入文本:
Dim oText As Object
Dim oCursor As Object
oText = oDoc.getText()
oCursor = oText.createTextCursor()
oText.insertString(oCursor, "插入的文本", False)
遍历段落:
Dim oParEnum As Object
Dim oPar As Object
oParEnum = oDoc.getText().createEnumeration()
Do While oParEnum.hasMoreElements()
oPar = oParEnum.nextElement()
' 处理段落
Loop
## 宏安全
### 安全设置
宏安全级别:
工具 → 选项 → LibreOffice → 安全 → 宏安全
安全级别: ├── 低 │ └── 允许所有宏(不推荐) ├── 中 │ └── 宏运行前询问 ├── 高 │ └── 只运行信任位置的宏 └── 很高 └── 只运行信任位置的签名宏
信任位置: ├── 添加信任目录 ├── 该目录的宏自动运行 ├── 不询问直接执行 └── 安全便利平衡
### 宏签名
数字签名:
签名作用: ├── 验证宏来源 ├── 确保宏未被修改 ├── 提高安全性 └── 建立信任
签名步骤:
- 获取数字证书
- 工具 → 宏 → 组织宏 → Basic
- 选择宏库
- 数字签名
- 选择证书签名
验证签名: ├── 打开文档时验证 ├── 显示签名信息 └── 确认来源可信
## 实用宏案例
### 格式化文档
格式化宏示例:
统一格式:
Sub FormatDocument
Dim oDoc As Object
Dim oParEnum As Object
Dim oPar As Object
oDoc = ThisComponent
oParEnum = oDoc.getText().createEnumeration()
Do While oParEnum.hasMoreElements()
oPar = oParEnum.nextElement()
' 设置字体
oPar.CharFontName = "宋体"
oPar.CharHeight = 12
' 设置行距
oPar.LineSpacing = 150
Loop
End Sub
### 批量处理
批量操作宏:
批量插入页眉:
Sub AddHeader
Dim oDoc As Object
Dim oStyle As Object
Dim oHeader As Object
Dim oText As Object
oDoc = ThisComponent
oStyle = oDoc.getStyleFamilies().getByName("PageStyles").getByName("Standard")
oStyle.HeaderIsOn = True
oHeader = oStyle.getHeaderText()
oText = oHeader.getText()
oText.setString("文档标题")
End Sub
## 小结
本章介绍了 LibreOffice Writer 的宏与自动化:
- 宏的概念和作用
- 录制和运行宏
- 编写 Basic 宏
- 文档对象模型
- 宏安全设置
- 实用宏案例
## 下一步
- [制作专业简历](/docs/libreoffice-writer/practical/resume):实战案例
- [撰写学术论文](/docs/libreoffice-writer/practical/academic-paper):论文排版