Table of Contents | ||||
---|---|---|---|---|
|
Introduction to ExcelApplication API
Info |
---|
The sample code template (template.xlsx), page (Part1_CSV.aspx), and code behind (Part1_CSV.aspx.cs) are included in the ExtendedSalesSummary project available for download as part of the ExcelWriter Basics Tutorials. |
This tutorial assumes that the coder knows how to set up an Excel Template using data markers and Excel cell formatting. The .XLSX template file is available here.
ExcelTemplate vs. ExcelApplication
Info |
---|
ExcelTemplate is the main class for template-driven document generation. This object opens an ExcelWriter template file, populates it with data from a specified data source, and generates a new Excel workbook. An Excel file uploaded as an |
...
- A Worksheet object representing the sheet to be copied,
- An integer representing the new worksheet's position and,
- The string representing the name of the new worksheet.
Setting up the template
The template file should look something like this:
...
Info |
---|
In the sample code, the complete template file is located in ExtendedSalesSummary/templates/template.xlsx .The template is also available here. |
Adding an ExcelWriter Reference in Visual Studio
Info |
---|
In the sample code, the reference to SoftArtisans.OfficeWriter.ExcelWriter.dll and to System.Data.SqlClient has already been added to the ExtendedSalesSummary project. |
...
- Open Visual Studio and create a .NET project.
- The sample code uses a web application.
- Add a reference to SoftArtisans.OfficeWriter.ExcelWriter.dll
- SoftArtisans.OfficeWriter.ExcelWriter.dll is located under Program Files > SoftArtisans > OfficeWriter > dotnet > bin
Writing the Code
The code for this report uses two functions- the Main
function and the BindCountryData
functions. The Main
function calls the BindCountryData
function taking each country's worksheet as a parameter. See below for further explanation.
Main function
1. Include the SoftArtisans.OfficeWriter.ExcelWriter namespace in the code behind
...
Code Block |
---|
xlt.Save(Page.Response, "output.xlsx", false); |
BindCountryData function
1. Create a function called BindCountryData
that takes a string parameter called selection
.
...
Note that there are multiple worksheets, each named for each country and containing it's specified data.
Final Code
Code Block |
---|
using SoftArtisans.Office.ExcelWriter; using System.Data.SqlClient; using System.Collections.Generic; ... protected void Main(object sender, EventArgs e){ ExcelApplication xla = new ExcelApplication(); Workbook wb = xla.Open(Page.MapPath(@"templates\template.xlsx")); for (int i = 0; i < selectedCountries.Count; i++) { wb.Worksheets.CopySheet(wb.Worksheets[0], wb.Worksheets.Count, selectedCountries[i]); } wb.Worksheets[0].Visibility = Worksheet.SheetVisibility.Hidden; wb.Worksheets[1].Select(); xlt = new ExcelTemplate(); xlt.Open(xla, wb); for (int i = 0; i < wb.Worksheets.Count; i++) { BindCountryData(wb.Worksheets[i].Name); } xlt.Process(); xlt.Save(Page.Response, "output.xlsx", false); } protected void BindCountryData(string selection) { DataBindingProperties dbp = xlt.CreateDataBindingProperties(); dbp.WorksheetName = selection; string[] specificInfo = { "FY 2008", "Foreign Trade Division", selection }; string[] headerTitles = { "FiscalYear", "TradeDivision", "Country" }; xlt.BindRowData(specificInfo, headerTitles, "Header", dbp); DataTable dts = Sales(selection, "TOP 5"); DataTable dts2 = Sales(selection, ""); xlt.BindData(dts, "Top", dbp); xlt.BindData(dts2, "Details", dbp); } public static DataTable Sales(string selection, string topORall) { //Create the query string queryString = "USE AdventureWorks2008R2; " + "DECLARE @find nvarchar(100); " + "SET @find ='" + selection + "'; " + "SELECT " + topORall + " Sales.Store.Name AS Description, Sales.SalesOrderHeader.TotalDue AS Sales FROM Sales.Store " + "INNER JOIN Sales.Customer ON Sales.Store.BusinessEntityID = Sales.Customer.StoreID " + "INNER JOIN Sales.SalesOrderHeader ON Sales.Customer.CustomerID = Sales.SalesOrderHeader.CustomerID " + "INNER JOIN Sales.SalesTerritory ON Sales.SalesTerritory.TerritoryID = Sales.Customer.TerritoryID " + "WHERE DATEPART(yyyy, Sales.SalesOrderHeader.OrderDate) = 2008 " + "AND Sales.SalesOrderHeader.OnlineOrderFlag = 0 " + "AND Sales.SalesTerritory.Name = @find " + "ORDER BY Sales DESC;"; //Get connection SqlConnection connection = new SqlConnection(@"Data Source=TS-IH03\SQL2008R2;Initial Catalog=ExcelApp2;Integrated Security=True"); //Assign command and associated connection SqlCommand cmd = new SqlCommand(queryString, connection); //Select data adapter SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = cmd; //Make a new table, fill it and return it DataTable dtGet = new DataTable(); adapter.Fill(dtGet); return dtGet; } protected List<string> GetListBoxSelections(){ //Get the ListBox selections and make the appropriate number of copies List<string> countryNames = new List<string>(); foreach (int i in ListBox1.GetSelectedIndices()) { countryNames.Add(ListBox1.Items[i].Text); } return countryNames; } |
Downloads
You can download the code for the Extended Sales Summary here.