核心思路,使用go调用vbs脚本把doc转换成docx,轮询到新生成的docx后返回docx文件内容
package main
import (
"fmt"
"log"
"os"
"os/exec"
"path/filepath"
"strings"
"time"
)
func main() {
dir, _ := os.Getwd()
file := dir + "\\1.doc"
if strings.ToLower(filepath.Ext(file)) == ".doc" {
res := exec.Command("cmd", "/c", "start", dir+"\\doc2docx.vbs", file) //核心关键技能
res.Start()
newFile := strings.Replace(file, ".doc", ".docx", 1)
log.Println("正在生成", newFile)
for {
_, e := os.Stat(newFile)
if os.IsNotExist(e) {
time.Sleep(time.Second * 1)
fmt.Print(".")
continue
} else {
time.Sleep(time.Second * 1)
log.Printf("\r.\n")
log.Println("生成完毕", newFile)
break
}
}
}
}
Vbs脚本代码
'创建一个word对象
set wApp=CreateObject("word.Application")
'获取文件传递到参数
strDocName = WScript.Arguments(0)
'一下三段代码主要是把文件名由doc转成docx
intPos = InStrRev(strDocName, ".")
strDocName = Left(strDocName, intPos - 1)
strDocName = strDocName & ".docx"
'打开文件,第一个参数,传递源文件路路径,第二个参数是否打开对话框,第三个参数是否只读
set wordapp=wApp.Documents.open(WScript.Arguments(0),False,True)
'12 是文件类型,具体可以参考微软官网
wordapp.SaveAs strDocName,12
'关闭操作
wordapp.Close
wApp.Quit