如何用Go 把doc文件转换成docx文件
2022.03

核心思路,使用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