Home > Software design >  How to use golang for .docx template (table content)
How to use golang for .docx template (table content)

Time:04-16

How to use golang for .docx template (table content):

Like that (the number of customers is dynamic) Like that

CodePudding user response:

You can use this simple package: "github.com/lukasjarosch/go-docx". This package helps you fill docx file templates by replacing {variables} with given text context.

Sample usage: sample docx template

Code to fill the template:

package main

import (
    "fmt"

    docx "github.com/lukasjarosch/go-docx"
)

func main() {
    replaceMap := docx.PlaceholderMap{
        "_contract_name_": "Home rental",
        "_name_":          "John Doe",
        "_summary_":       "Terms and conditions",
        "_date_":          "13-04-2022",
        "_condition_1_":   "apartment should always be cleaned",
        "_condition_2_":   "term 2 ...",
        "_condition_4_":   "term 4 ...",
        "_condition_3_":   "term 3 ...",
        "_condition_5_":   "term 5 ...",
    }

    for i := 1; i <= 5; i   {
        replaceMap[fmt.Sprintf("_accept_%d", i)] = "✔️"
        replaceMap[fmt.Sprintf("_reject_%d", i)] = ""
    }

    // read and parse the template docx
    doc, err := docx.Open("template.docx")
    if err != nil {
        panic(err)
    }

    // replace the keys with values from replaceMap
    err = doc.ReplaceAll(replaceMap)
    if err != nil {
        panic(err)
    }

    // write out a new file
    err = doc.WriteToFile("replaced.docx")
    if err != nil {
        panic(err)
    }
}

Result file: filled template

P.S: this package does not provide functionality to insert images. If you want to insert images you can use this commercial package: "github.com/unidoc/unioffice/document"

  • Related