DataTplCalcMath.vb
''
'' This code is part of Document Solutions for Word demos.
'' Copyright (c) MESCIUS inc. All rights reserved.
''
Imports System.Globalization
Imports GrapeCity.Documents.Word

'' This example demonstrates the available math functions
'' that can be used with the 'calc' report templates feature.
Public Class DataTplCalcMath
    Function CreateDocx() As GcWordDocument
        '' A simple data source to be used by the math functions:
        Dim data = {Math.PI}

        Dim doc = New GcWordDocument()

        '' Add the data source:
        doc.DataTemplate.DataSources.Add("ds", data)

        '' Styles and templates to show results:
        Dim bulletListTemplate = doc.ListTemplates.Add(BuiltInListTemplateId.BulletDefault, "bulletListTemplate")
        Dim exStyle = doc.Styles(BuiltInStyleId.Heading3)
        Dim resStyle = doc.Styles(BuiltInStyleId.Strong)

        Dim paras = doc.Body.Paragraphs
        Dim add As Action(Of String) =
            Sub(expr)
                '' Four zero-width spaces are inserted after the opening brace to prevent template expansion:
                paras.Add(expr.Insert(1, New String(ChrW(&H200B), 4)) + " :  ", exStyle).ListFormat.Template = bulletListTemplate
                paras.Last.GetRange().Runs.Add(expr, resStyle)
            End Sub

        add("{{ ds.value }}")
        add("{{ calc Abs(-ds.value) }}")
        add("{{ calc Round(ds.value, 2) }}")
        add("{{ calc Round(ds.value, 2, ""banker"") }}")
        add("{{ calc Round(ds.value, 2, ""halfup"") }}")
        add("{{ calc Round(ds.value, 2, ""halfdown"") }}")
        add("{{ calc Round(ds.value, 2, ""up"") }}")
        add("{{ calc Round(ds.value, 2, ""down"") }}")
        add("{{ calc Round(ds.value, 2, ""ceiling"") }}")
        add("{{ calc Round(ds.value, 2, ""floor"") }}")
        add("{{ calc Acos(ds.value) }}")
        add("{{ calc Asin(ds.value) }}")
        add("{{ calc Atan(ds.value) }}")
        add("{{ calc Atan2(ds.value, 1) }}")
        add("{{ calc Ceiling(ds.value) }}")
        add("{{ calc Cos(ds.value) }}")
        add("{{ calc Cosh(ds.value) }}")
        add("{{ calc Exp(ds.value) }}")
        add("{{ calc Floor(ds.value) }}")
        add("{{ calc Log10(ds.value) }}")
        add("{{ calc Log(ds.value) }}")
        add("{{ calc Log(ds.value, 10) }}")
        add("{{ calc Pow(ds.value, 2) }}")
        add("{{ calc Rand() }}")
        add("{{ calc RandBetween(0, 100) }}")
        add("{{ calc Sign(ds.value) }}")
        add("{{ calc Sin(ds.value) }}")
        add("{{ calc Sinh(ds.value) }}")
        add("{{ calc Sqrt(ds.value) }}")
        add("{{ calc Tan(ds.value) }}")
        add("{{ calc Tanh(ds.value) }}")

        '' Process the templates:
        doc.DataTemplate.Process(CultureInfo.GetCultureInfo("en-US"))

        '' Add a short note describing the demo at the top of the document:
        paras.Insert(
            "This example demonstrates the available math functions " +
            "that can be used with the 'calc' report templates feature. " +
            "Please see this sample source code for full details.",
            InsertLocation.Start)
        paras.Insert("Report templates: available calc math functions", doc.Styles(BuiltInStyleId.Heading1), InsertLocation.Start)

        '' Done:
        Return doc
    End Function
End Class