Search code examples
gotemplatesdocxword-template

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


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

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


Solution

  • 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"