Page tree
    Created with Raphaël 2.1.0
    Loading...
Skip to end of metadata
Go to start of metadata

Intro

This demo illustrates some of the formulas available for WordTemplate in OfficeWriter 4.1 and above.


While Microsoft Word provides a limited number of formulas, they are restrictive.  Specifically, Word formulas must be contained in a table, and must take either ABOVE, LEFT, or a list of values.

With OfficeWriter 4.1 and above, WordTemplate provides a selection of formulas that enhance Word's built-in formulas.  A WordTemplate formula is specified as a mergefield and has a special syntax:«=SUM(datasource.fieldname)». A WordTemplate formula operates on a column of values in the data source and can be placed anywhere in a document.  In OfficeWriter 4.1 and above, the following WordTemplate formulas are available:

  • AVERAGE 
  • COUNT 
  • COUNTA 
  • MAX 
  • MIN 
  • PRODUCT 
  • STDEV 
  • STDEVP 
  • SUM 
  • VAR 
  • VARP

Code

public void GenerateDocument()
    {
        WordTemplate wt = new WordTemplate();
 
        // Create the array of mergefield names
        string[] fields = new string[] { "TestDate", "School", "Town", "Version" };
 
        // Create the array of values, each of which corresponds to a mergefield above
        object[] values = new object[] {
        new DateTime(2009, 11, 16).ToShortDateString(),"Samuel Adams HS", "Milbury", wt.Version};
 
        // Open the template document
        wt.Open(@"..\..\WordTemplateFiles\TestScoreReportTemplate.docx");
 
        // Set the main document data source
        wt.SetDataSource(values, fields, "");
 
        // Retrieve test score data
        DataTable dt = GetScores();
 
        // In a repeat block, a new entry is inserted for each row in the
        // data source.  When the data source is a DataTable, the mergefield
        // names are the same as the column names; so there is no need to
        // specify mergefield names as we did above.  However, we do have to set
        //a bookmark, "Items", so that wordwriter knows where to repeatedly bind the data.
        wt.SetRepeatBlock(dt, "Items");
 
        // Populate the template
        wt.Process();
 
        // Save the document to the disc in the desired location
        wt.Save(@"..\..\WordOutputFiles\ScoreReport_output.docx");
    }
 
private DataTable GetScores()
    {
        DataTable dt = new DataTable();
 
        dt.Columns.Add("StudentID", typeof(string));
        dt.Columns.Add("ReadingScore", typeof(int));
        dt.Columns.Add("WritingScore", typeof(int));
        dt.Columns.Add("MathScore", typeof(int));
        dt.Columns.Add("TotalScore", typeof(int));
 
        Random rand = new Random();
 
        int rScore, wScore, mScore;
        for (int i = 0; i < 30; ++i)
        {
            rScore = rand.Next(400, 800);
            wScore = rand.Next(400, 800);
            mScore = rand.Next(400, 800);
            dt.Rows.Add(
                string.Format("S{0:000000}", rand.NextDouble() * 1000000),
                rScore, wScore, mScore, rScore + wScore + mScore
            );
        }
 
        DataTable dtSorted = dt.Clone();
        foreach (DataRow row in dt.Select("", "StudentID asc"))
            dtSorted.ImportRow(row);
 
        return dtSorted;
    }

 Downloads

  • No labels