...
2. Add the merge fields for the header and total data. These values are a single row of data called "OrderDetailsOrderHeader." The values are "FirstName," "LastName," and "Date,." "SubTotal," "Tax," and "Total."
3. Create a table for the order data and add the merge fields . These values are in a data table created from AdventureWorks data. In single row of data called "OrderDetails." In this sample, the values are "Item," "Qty," "Price," "LineTotal," "SubTotal," "Tax," and "LineTotalTotal."
4. Format the currency fields in the Field menu by checking "Text to be inserted before" and entering a dollar sign ($).with a formatting switch, such as: "#/ $#,###0.00"
The template should resemble this:
...
4. Create an object
array for the header values and a string
array for the column names.
WordTemplate
can be bound to numerous types of .NET data structures: single variables, arrays (1-D, jagged, multi-dimensional), DataSet
,DataTable
, IDataReader
etc. The source of the data can come from anywhere.
Some of the aforementioned structures have built in column names, such as the DataTable
. When working with arrays, which don't have built in column names, you have to define the column names in a separate string
array.
Code Block |
---|
object[] detailsArrayorderHeader = { "Jane", "Doe", DateTime.Now.ToString("MM/dd/yy")}; string[] orderHeaderColNames = { "FirstName", "13139.51LastName", "558.43", "13697.94" }; Date"}; |
5. Create two arrays as the OrderDetail data set.
Code Block |
---|
object[] detailsArray = {"Sport-100 Helmet, Black", 3, 34.99, 104.97, 104.97, 4.46, 109.43 }; string[] detailColNames = {"Item", "FirstNameQty", "LastNamePrice", "DateLineTotal", "Subtotal", "Tax", "Total" }; |
5. Get the data for the Order Info data set.
Info | ||
---|---|---|
| ||
In the sample project, we are parsing CSV files with query results, rather than querying a live database. The CSV files are available under the datadirectory. There is a copy of the CSV parser, |
This call is to a helper method GetCSVData
that parses the CSV files and returns a DataTable
with the values.
Code Block |
---|
DataTable dtOrderInfo = GetCSVData("//data//OrderInfo.csv");
|
If you are following in your own project and would like to parse the CSV files as well, you will need to:
- Add a reference to
GenericParsing.dll
- Include
GeneringParsing
at the top of your code. - Add the
GetCSVData
method that can be found in the sample code.
6. Use the WordTemplate.SetDataSource
method to bind the order info to the merge fields in the template file. This data source has no name. One data source can be bound without a name, but it must be bound first.
SetDataSource()
binds a single row of data to the template.
Code Block |
---|
WT.SetDataSource(dtOrderInfoorderHeader, orderHeaderColNames, "OrderHeader"); |
7. Use SetDataSource()
to bind the order details arrays. Note that the data source name is the last string
...
Code Block |
---|
using SoftArtisans.OfficeWriter.WordWriter; ... //Instantiate a new WordTemplate object WordTemplate WT = new WordTemplate(); //Open the template file WT.Open(Page.MapPath("//templates//Part1_Invoice_Template.docx")); //Create the array of detailsheader values object[] detailsArrayorderHeader = { "Jane", "Doe", DateTime.Now.ToString("MM/dd/yy")}; //Create the array of column names string[] orderHeaderColNames = { "FirstName", "LastName", "Date"}; //Create the array of details values object[] detailsArray = {"Sport-100 Helmet, Black", 3, 34.99, 104.97", "104.97, 4.46", "109.43" }; //Create the array of column names string[] detailColNames = {"FirstNameItem", "LastNameQty", "DatePrice", "LineTotal", "Subtotal", "Tax", "Total" }; //Get the order info datatable using GenericParser DataTable dtOrderInfo = GetCSVData("//data//OrderInfo.csv"); //Set the data sources to import a single row of data for each source WT.SetDataSource(dtOrderInfoorderHeader, orderHeaderColNames, "OrderHeader"); WT.SetDataSource(detailsArray, detailColNames, "OrderDetails"); //Process to import the data to the template WT.Process(); WT.Save(Page.Response, "Part1_Output.docx", false); |
...