go读取docx文件

主要使用 baliance.com/gooxml 下的 document 包
原理:windows下的docx格式文件实际上是一个压缩包,打开之后可以看到具体的内容
下边直接上代码,实现的是获取docx文件中的文本和表格中的文本

package main
import (
	"fmt"
	"runtime"
	"time"

	"baliance.com/gooxml/document"
)

func main() {
	doc, err := document.Open("测试.docx")
	if err != nil {
		log.Fatalf("error opening document: %s", err)
		return
	}
	//批注
	for _, docfile := range doc.DocBase.ExtraFiles {
		if docfile.ZipPath != "word/comments.xml" {
			continue
		}

		file, err := os.Open(docfile.DiskPath)
		if err != nil {
			continue
		}
		defer file.Close()
		f, err := file.Stat()
		if err != nil {
			continue
		}
		size := f.Size()
		var fileinfo []byte = make([]byte, size)
		_, err = file.Read(fileinfo)
		if err != nil {
			continue
		}
		//实际应该解析中的数据
		fmt.Println(string(fileinfo))
	}

	//书签
	for _, bookmark := range doc.Bookmarks() {
		bookname := bookmark.Name()
		if len(bookname) == 0 {
			continue
		}
		fmt.Println(bookmark.Name())
	}

	//页眉
	for _, head := range doc.Headers() {
		var text string
		for _, para := range head.Paragraphs() {
			for _, run := range para.Runs() {
				text += run.Text()
			}
		}
		if len(text) == 0 {
			continue
		}
		fmt.Println(text)
	}

	//页脚
	for _, footer := range doc.Footers() {
		for _, para := range footer.Paragraphs() {
			var text string
			for _, run := range para.Runs() {
				text += run.Text()
			}
			if len(text) == 0 {
				continue
			}
			fmt.Println(text)
		}
	}

	//doc.Paragraphs()得到包含文档所有的段落的切片
	for _, para := range doc.Paragraphs() {
		var text string
		//run为每个段落相同格式的文字组成的片段
		for _, run := range para.Runs() {
			text += run.Text()
		}
		if len(text) == 0 {
			continue
		}
		//打印一段
		fmt.Println(text)
	}

	//获取表格中的文本
	for _, table := range doc.Tables() {
		for _, run := range table.Rows() {
			for _, cell := range run.Cells() {
				var text string
				for _, para := range cell.Paragraphs() {
					for _, run := range para.Runs() {
						//fmt.Print("\t-----------第", j, "格式片段-------------")
						text += run.Text()
					}
				}
				if len(text) == 0 {
					continue
				}
				fmt.Println(text)
			}
		}
	}
}

你可能感兴趣的:(Go,golang,开发语言)