#include <stdio.h>
#include "libxl.h"

int main()
{
    BookHandle book = xlCreateXMLBook();
    if(book) 
    {   
        FontHandle boldFont;
        FontHandle titleFont;
        FormatHandle titleFormat;
        FormatHandle headerFormat;
        FormatHandle descriptionFormat;
        FormatHandle amountFormat;
        FormatHandle totalLabelFormat;
        FormatHandle totalFormat;
        FormatHandle signatureFormat;
        SheetHandle sheet;
      
        boldFont = xlBookAddFont(book, 0);
        xlFontSetBold(boldFont, 1);

        titleFont = xlBookAddFont(book, 0);
        xlFontSetName(titleFont, L"Arial Black");
        xlFontSetSize(titleFont, 16);

        titleFormat = xlBookAddFormat(book, 0);
        xlFormatSetFont(titleFormat, titleFont);

        headerFormat = xlBookAddFormat(book, 0);
        xlFormatSetAlignH(headerFormat, ALIGNH_CENTER);
        xlFormatSetBorder(headerFormat, BORDERSTYLE_THIN);
        xlFormatSetFont(headerFormat, boldFont);        
        xlFormatSetFillPattern(headerFormat, FILLPATTERN_SOLID);
        xlFormatSetPatternForegroundColor(headerFormat, COLOR_TAN);

        descriptionFormat = xlBookAddFormat(book, 0);
        xlFormatSetBorderLeft(descriptionFormat, BORDERSTYLE_THIN);

        amountFormat = xlBookAddFormat(book, 0);
        xlFormatSetNumFormat(amountFormat, NUMFORMAT_CURRENCY_NEGBRA);
        xlFormatSetBorderLeft(amountFormat, BORDERSTYLE_THIN);
        xlFormatSetBorderRight(amountFormat, BORDERSTYLE_THIN);
                
        totalLabelFormat = xlBookAddFormat(book, 0);
        xlFormatSetBorderTop(totalLabelFormat, BORDERSTYLE_THIN);
        xlFormatSetAlignH(totalLabelFormat, ALIGNH_RIGHT);
        xlFormatSetFont(totalLabelFormat, boldFont);

        totalFormat = xlBookAddFormat(book, 0);
        xlFormatSetNumFormat(totalFormat, NUMFORMAT_CURRENCY_NEGBRA);
        xlFormatSetBorder(totalFormat, BORDERSTYLE_THIN);
        xlFormatSetFont(totalFormat, boldFont);
        xlFormatSetFillPattern(totalFormat, FILLPATTERN_SOLID);
        xlFormatSetPatternForegroundColor(totalFormat, COLOR_YELLOW);

        signatureFormat = xlBookAddFormat(book, 0);
        xlFormatSetAlignH(signatureFormat, ALIGNH_CENTER);
        xlFormatSetBorderTop(signatureFormat, BORDERSTYLE_THIN);
             
        sheet = xlBookAddSheet(book, L"Invoice", 0);
        if(sheet)
        {
            xlSheetWriteStr(sheet, 2, 1, L"Invoice No. 3568", titleFormat);

            xlSheetWriteStr(sheet, 4, 1, L"Name: John Smith", NULL);
            xlSheetWriteStr(sheet, 5, 1, L"Address: San Ramon, CA 94583 USA", 0);

            xlSheetWriteStr(sheet, 7, 1, L"Description", headerFormat);
            xlSheetWriteStr(sheet, 7, 2, L"Amount", headerFormat);

            xlSheetWriteStr(sheet, 8, 1, L"Ball-Point Pens", descriptionFormat);
            xlSheetWriteNum(sheet, 8, 2, 85, amountFormat);
            xlSheetWriteStr(sheet, 9, 1, L"T-Shirts", descriptionFormat);
            xlSheetWriteNum(sheet, 9, 2, 150, amountFormat);
            xlSheetWriteStr(sheet, 10, 1, L"Tea cups", descriptionFormat);
            xlSheetWriteNum(sheet, 10, 2, 45, amountFormat);

            xlSheetWriteStr(sheet, 11, 1, L"Total:", totalLabelFormat);
            xlSheetWriteFormula(sheet, 11, 2, L"=SUM(C9:C11)", totalFormat);

            xlSheetWriteStr(sheet, 14, 2, L"Signature", signatureFormat);

            xlSheetSetCol(sheet, 1, 1, 40, 0, 0);
            xlSheetSetCol(sheet, 2, 2, 15, 0, 0);
        }

        if(xlBookSave(book, L"invoice.xlsx")) printf("\nFile invoice.xlsx has been created.\n");
        xlBookRelease(book);   
    }
 
    return 0;
}
