Accessing CSV Data
To access CSV data while building a report, you can pass a CsvDataSource
instance to the engine as a data source.
Using of CsvDataSource
enables you to work with typed values rather than just strings in template documents. Although CSV as a format does not define a way to store values of types other than strings, CsvDataSource
is capable to recognize values of the following types by their string representations:
- Long
- Double
- Boolean
- Date
Note – For recognition of data types to work, string representations of corresponding values must be formed using invariant culture settings.
In template documents, a CsvDataSource
instance should be treated as a sequence of objects having corresponding fields as shown in the following example.
CSV
John Doe,30,1989-04-01 4:00:00 pm
Jane Doe,27,1992-01-31 07:00:00 am
John Smith,51,1968-03-08 1:00:00 pm
Template document
<<foreach [in persons]>>Name: <<[Column1]>>, Age: <<[Column2]>>, Date of Birth: <<[Column3]:"dd.MM.yyyy">>
<</foreach>>
Average age: <<[persons.average(p => p.Column2)]>>
Source code
Document doc = ... // Loading a template document.
CsvDataSource dataSource = ... // Loading CSV.
ReportingEngine engine = new ReportingEngine();
engine.buildReport(doc, dataSource, "persons");
Result document
Name: John Doe, Age: 30, Date of Birth: 01.04.1989
Name: Jane Doe, Age: 27, Date of Birth: 31.01.1992
Name: John Smith, Age: 51, Date of Birth: 08.03.1968
Average age: 36
By default, CsvDataSource
uses column names such as “Column1”, “Column2”, and so on, as you can see from the previous example. However, CsvDataSource
can be configured to read column names from the first line of CSV data as shown in the following example.
CSV
Name,Age,Birth
John Doe,30,1989-04-01 4:00:00 pm
Jane Doe,27,1992-01-31 07:00:00 am
John Smith,51,1968-03-08 1:00:00 pm
Template document
<<foreach [in persons]>>Name: <<[Name]>>, Age: <<[Age]>>, Date of Birth: <<[Birth]:"dd.MM.yyyy">>
<</foreach>>
Average age: <<[persons.average(p => p.Age)]>>
Source code
Document doc = ... // Loading a template document.
CsvDataLoadOptions options = new CsvDataLoadOptions(true);
CsvDataSource dataSource = new CsvDataSource(..., options); // Loading CSV.
ReportingEngine engine = new ReportingEngine();
engine.buildReport(doc, dataSource, "persons");
Result document
Name: John Doe, Age: 30, Date of Birth: 01.04.1989
Name: Jane Doe, Age: 27, Date of Birth: 31.01.1992
Name: John Smith, Age: 51, Date of Birth: 08.03.1968
Average age: 36
Also, you can use CsvDataLoadOptions
to customize the following characters playing special roles while loading CSV data:
- Value separator (the default is comma)
- Single-line comment start (the default is sharp)
- Quotation mark enabling to use other special characters within a value (the default is double quotes)