EasyXLS

How to export DataSet to Excel in custom format in C++.NET

/*---------------------------------------------------------------------------
 | Tutorial 02
 |
 | This code sample shows how to export DataSet to Excel file in C++.NET (1).
 | The DataSet contains data from a SQL database, but it also can contain
 | data from other sources like GridView, DataGridView, DataGrid or other.
 | The cells are formatted using a user-defined format (2).
 ----------------------------------------------------------------------------*/

#include "stdafx.h"

#using <System.Xml.dll>
#using <System.dll>

using namespace System;
using namespace System::Drawing;
using namespace System::Data;
using namespace EasyXLS;
using namespace EasyXLS::Constants;

int main()
{
    Console::WriteLine("Tutorial 02\n----------\n");

    // Create an instance of the class that exports Excel files (1)
    ExcelDocument ^workbook = gcnew ExcelDocument();

    // Create the database connection
    String ^sConnectionString = "Initial Catalog=Northwind;Data Source=localhost;Integrated Security=SSPI;";
    System::Data::SqlClient::SqlConnection ^sqlConnection = 
        gcnew System::Data::SqlClient::SqlConnection(sConnectionString);
    sqlConnection->Open();

    // Create the adapter used to fill the dataset
    String ^sQueryString = "SELECT TOP 100 CAST(Month(ord.OrderDate) AS varchar) + ";
    sQueryString = String::Concat(sQueryString, "'/' + CAST(Day(ord.OrderDate) AS varchar) + ");
    sQueryString = String::Concat(sQueryString, "'/' + CAST(year(ord.OrderDate) AS varchar) AS 'Order Date', ");
    sQueryString = String::Concat(sQueryString, "P.ProductName AS 'Product Name', O.UnitPrice AS Price, ");
    sQueryString = String::Concat(sQueryString, "CAST(O.Quantity AS varchar) AS Quantity ,");
    sQueryString = String::Concat(sQueryString, "O.UnitPrice * O. Quantity AS Value ");
    sQueryString = String::Concat(sQueryString, "FROM Orders AS ord, [Order Details] AS O, Products AS P ");
    sQueryString = String::Concat(sQueryString, "WHERE O.ProductID = P.ProductID AND O.OrderID = ord.OrderID");
    System::Data::SqlClient::SqlDataAdapter ^adp = 
        gcnew System::Data::SqlClient::SqlDataAdapter(sQueryString, sqlConnection);

    // Populate the dataset
    System::Data::DataSet ^ds  = gcnew System::Data::DataSet();
    adp->Fill(ds);

    // Create an instance of the class used to format the cells in the report(2)
    ExcelAutoFormat ^xlsAutoFormat = gcnew ExcelAutoFormat();

    // Set the formatting style of the header
    ExcelStyle ^xlsHeaderStyle = gcnew ExcelStyle(Color::LightGreen);
    xlsHeaderStyle->setFontSize(12);
    xlsAutoFormat->setHeaderRowStyle(xlsHeaderStyle);

    // Set the formatting style of the cells (alternating style)
    ExcelStyle ^xlsEvenRowStripesStyle = gcnew ExcelStyle(Color::FloralWhite);
    xlsEvenRowStripesStyle->setFormat("$0.00");
    xlsEvenRowStripesStyle->setHorizontalAlignment(Alignment::ALIGNMENT_LEFT);
    xlsAutoFormat->setEvenRowStripesStyle(xlsEvenRowStripesStyle);
    ExcelStyle ^xlsOddRowStripesStyle = gcnew ExcelStyle(Color::FromArgb(240, 247, 239));
    xlsOddRowStripesStyle->setFormat("$0.00");
    xlsOddRowStripesStyle->setHorizontalAlignment (Alignment::ALIGNMENT_LEFT);
    xlsAutoFormat->setOddRowStripesStyle(xlsOddRowStripesStyle);
    ExcelStyle ^xlsLeftColumnStyle = gcnew ExcelStyle(Color::FloralWhite);
    xlsLeftColumnStyle->setFormat("mm/dd/yyyy");
    xlsLeftColumnStyle->setHorizontalAlignment(Alignment::ALIGNMENT_LEFT);
    xlsAutoFormat->setLeftColumnStyle(xlsLeftColumnStyle);

    // Export the Excel file
    Console::WriteLine("Writing file C:\\Samples\\Tutorial02.xlsx.");
    workbook->easy_WriteXLSXFile_FromDataSet("c:\\Samples\\Tutorial02.xlsx", ds, xlsAutoFormat, "Sheet1");

    // Confirm export of Excel file
    String ^sError = workbook->easy_getError();
    if (sError->Equals(""))
        Console::Write("\nFile successfully created. Press Enter to Exit...");
    else
        Console::Write(String::Concat("\nError encountered: ", sError, "\nPress Enter to Exit..."));

    // Close the database connection
    sqlConnection->Close();

    // Dispose memory
    delete  workbook;
    delete ds;
    delete sqlConnection;
    delete adp;

    Console::ReadLine();

    return 0;
}


C++ without .NET Framework
This tutorial is valid for C++ applications that can use .NET Framework. For applications that does not have .NET Framework integrated, a similar code sample is available.

EasyXLS Excel libraries:

.NET
Excel Library for C++.NET
full .NET version to import, export or convert Excel files
Excel Writer for C++.NET
.NET version to create and export Excel files
Express Excel Writer for C++.NET
limited .NET version to create and export Excel files in predefined formats
Download EasyXLS™ Excel Library for C++.NET

File formats:

MS Excel 97 - 2003
MS Excel 2007 - 2010
MS Excel 2013
MS Excel 2016
MS Excel 2019
XLSX XLSM XLSB XLS
XML HTML CSV TXT