Scrivere e leggere file DOCX in Go con Godocx

Mattepuffo's logo
Scrivere e leggere file DOCX in Go con Godocx

Scrivere e leggere file DOCX in Go con Godocx

Godocx è una libreria per Go che ci permette di scrivere e leggere file DOCX.

Per quanto riguarda la lettura, precisiamo che si tratta di estrapolare l'XML del file, non di aprirlo come fosse Word.

Potrebbe anche non servire, ma vediamo comunque come fare.

Prima di tutto installiamo la libreria:

go get github.com/gomutex/godocx

Qui sotto un pò di codice:

// More examples in separate repository
// https://github.com/gomutex/godocx-examples

package main

import (
	"encoding/xml"
	"fmt"
	"os"

	"github.com/gomutex/godocx"
)

func main() {
	// CREO DOCUMENTO
	document, err := godocx.NewDocument()

	if err != nil {
		fmt.Println(err)
		os.Exit(0)
	}

	document.AddHeading("TITOLO", 0)

	p := document.AddParagraph("Paragrafo, ")
	p.AddText("Grassetto, ").Bold(true)
	p.AddText("Corsivo.").Italic(true)

	document.AddHeading("SOTTO TITOLO, level 1", 1)
	document.AddParagraph("Quote").Style("Intense Quote")
	document.AddParagraph("Elemento lista non ordinata").Style("List Bullet")
	document.AddParagraph("Elemento lista ordinata").Style("List Number")

	records := []struct{ ID, SKU, Desc string }{{"1", "SKU1", "T-Shirt"}, {"2", "SKU2", "OPPO"}, {"3", "SKU3", "Nike"}}

	table := document.AddTable()
	table.Style("LightList-Accent4")
	hdrRow := table.AddRow()
	hdrRow.AddCell().AddParagraph("ID")
	hdrRow.AddCell().AddParagraph("SKU")
	hdrRow.AddCell().AddParagraph("Descrizione")

	for _, record := range records {
		row := table.AddRow()
		row.AddCell().AddParagraph(record.ID)
		row.AddCell().AddParagraph(record.SKU)
		row.AddCell().AddParagraph(record.Desc)
	}

	err = document.SaveTo("test.docx")

	if err != nil {
		fmt.Println(err)
		os.Exit(0)
	}

	// LEGGO DOCUMENTO
	documentRead, err := godocx.OpenDocument("./test.docx")

	if err != nil {
		fmt.Println(err)
		os.Exit(0)
	}

	xmlEncoder := xml.NewEncoder(os.Stdout)

	err = documentRead.Document.Body.MarshalXML(xmlEncoder, xml.StartElement{})

	if err != nil {
		fmt.Println(err)
		os.Exit(0)
	}
}

Enjoy!


Condividi

Commentami!