关键字: word go语言 办公软件 自动化 excel office
背景
近来因为工作需要,经常性要重复地写报告,搞安全的就是苦逼啊。每次都需要人工查这查那,还要复制黏贴。 重复地复制黏贴会比较烦人。所以弄好一份表就自动让机器代替人工黏贴到word文档,自动生成会相对舒服且快速,有什么问题直接修改excel即可。
步骤
我是用go语言进行开发的。
go的版本:14
office使用的是:unioffice库
== 地址:https://github.com/unidoc/unioffice ==
第二个需要用到的库是:docx
==地址:https://github.com/nguyenthenguyen/docx ==
ps:
第一个库没研究透是什么情况,主要用来替换多行内容的。比如我有三个内容需要写进docx,但是只做了一行的标记,替换的时候只会替换第一个内容。那么第二、第三个内容就无法写进去了。这个时候只能用unidoc这个库来写入更多的内容且自动换行。
那么为什么需要第二个库呢,因为第二个库,简单直接,只能根据标记替换。且在页眉替换的时候不影响水印。 简单直接。缺点就是无法找到标记的内容,进行多行写入。
确定流程
其实最好先确定一下程序的处理流程和具体人工处理的步骤,因为偷懒我这里就不提供了,因为我也是画着画着就没有弄了。
编写伪代码
在vscode上编写具体的流程伪代码
编写正式的代码
按照自己的思路,确定好变量、常量、具体的处理流程等等,按照伪代码进行一步一步的代码编写。
最终的代码
package main
import (
"fmt"
"log"
"time"
"github.com/unidoc/unioffice/document"
"github.com/unidoc/unioffice/measurement"
"github.com/unidoc/unioffice/schema/soo/wml"
"github.com/unidoc/unioffice/spreadsheet"
)
type biaozhi struct {
yeMeiTime string // 页眉的时间编号
neiRouTime string // 内容的时间格式
ipaddr string // 其实就是告警对象:主要填IP
tiaomushu string // 告警的条目数
gaojingxinxi string // 告警信息:告警描述
xitong string // 被攻击的系统名称
danwei string // 被攻击的单位
chuzhijianyi string // 处置建议
lujing string // 告警中的路径,病毒存在的路径、webshell的路径等
shijianmingcheng string // 事件名称
yjShiJianLeiXing string // 应急事件报告中特有的事件类型
shijianjibie string // 事件的级别
loudongmingcheng string // 漏洞预警:漏洞名称
yxBanBen string // 漏洞预警:影响版本
wenjianmingcheng string // 另存为文件的名称
fengxianmiaoshu string // 风险验证描述
}
var (
// Baogao 要打开的报告类型
Baogao string
// SaveFile 要打开的报告类型
SaveFile string
dataList biaozhi
)
// 1.判断输出的是什么通告
func tonggao() {
a, _ := spreadsheet.Open("素材.xlsx")
excel, err := a.GetSheet("需要填写的资料")
if err != nil {
log.Fatalf("excel打开表错误,错误信息: %s", err)
}
defer a.Close()
SaveFile = excel.Cell("B1").GetString() // 看是什么类型的报告获取字符串。
switch SaveFile {
case "可疑行为":
Baogao = "可疑行为预警通告.docx"
case "风险预警":
Baogao = "安全风险预警通告.docx"
case "应急预警":
Baogao = "安全事件应急通告.docx"
case "漏洞预警":
Baogao = "安全漏洞预警通告.docx"
default:
log.Println("请检查(素材.xlsx)文件(需要填写的资料)表中报告类型是否正确!")
}
// 获取相关的数据
dataList.shijianmingcheng = excel.Cell("B2").GetString() // 风险预警:获取事件名称
dataList.shijianjibie = excel.Cell