The code below will help you to implement an C# app to generate invoice. ByteScout Spreadsheet SDK: the SDK to create, read, modify and calculate spreadsheets. Formula calculations are supported, import and export to and from JSON, CSV, XML, databases, arrays. It can generate invoice in C#.
This code snippet below for ByteScout Spreadsheet SDK works best when you need to quickly generate invoice in your C# application. Just copy and paste the code into your C# application’s code and follow the instruction. This basic programming language sample code for C# will do the whole work for you to generate invoice.
Trial version of ByteScout Spreadsheet SDK can be downloaded for free from our website. It also includes source code samples for C# and other programming languages.
On-demand (REST Web API) version:
Web API (on-demand version)
On-premise offline SDK for Windows:
60 Day Free Trial (on-premise)
using Bytescout.Spreadsheet; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; namespace GenerateInvoice { class Program { static void Main(string[] args) { try { // STEP-1: Get Invoice Data var oInvoiceData = GetInvoiceData(); // STEP-2: Generate Invoice in memory var document = _GetSpreadsheet(oInvoiceData); // Step-3: Export to XLS, XLSX and PDF document.SaveAsXLSX("Invoice.xlsx"); document.SaveAsXLS("Invoice.xls"); document.SaveAsPDF("Invoice.pdf"); // Open output file Process.Start("Invoice.xlsx"); Process.Start("Invoice.pdf"); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.WriteLine("Press enter key to exit..."); Console.ReadLine(); } /// <summary> /// Get Spreadsheet /// </summary> private static Spreadsheet _GetSpreadsheet(InvoiceData oInvoiceData) { // Create new Spreadsheet Spreadsheet document = new Spreadsheet(); document.Workbook.AutoCalculation = true; document.Workbook.DefaultFont = new SpreadsheetFont("Arial", 10); // Add new worksheet Worksheet Sheet = document.Workbook.Worksheets.Add("Invoice"); int startRow = 0; // 1. Write Company Name Sheet.Cell(startRow, 0).Value = oInvoiceData.CompanyName; Sheet.Cell(startRow, 0).Font = new Font("Arial", 15, FontStyle.Bold | FontStyle.Italic); // 2. Write Company Address Sheet.Cell((++startRow), 0).Value = oInvoiceData.CompanyAddress1; Sheet.Cell((++startRow), 0).Value = oInvoiceData.CompanyAddress2; startRow++; // 3. Write Invoice Info Sheet.Cell((++startRow), 2).Value = "Invoice No."; Sheet.Cell(startRow, 2).Font = new Font("Arial", 10, FontStyle.Bold); Sheet.Cell(startRow, 2).AlignmentHorizontal = Bytescout.Spreadsheet.Constants.AlignmentHorizontal.Right; Sheet.Cell(startRow, 3).Value = oInvoiceData.InvoiceNo; Sheet.Cell((++startRow), 2).Value = "Invoice Date."; Sheet.Cell(startRow, 2).Font = new Font("Arial", 10, FontStyle.Bold); Sheet.Cell(startRow, 2).AlignmentHorizontal = Bytescout.Spreadsheet.Constants.AlignmentHorizontal.Right; Sheet.Cell(startRow, 3).ValueAsDateTime = oInvoiceData.InvoiceDate; Sheet.Cell(startRow, 3).NumberFormatString = "mm/dd/yyyy"; // 4. Write Client Info Sheet.Cell((++startRow), 0).Value = oInvoiceData.ClientName; Sheet.Cell(startRow, 0).Font = new Font("Arial", 12, FontStyle.Bold); Sheet.Cell((++startRow), 0).Value = oInvoiceData.ClientAddress1; Sheet.Cell((++startRow), 0).Value = oInvoiceData.ClientAddress2; startRow++; // 5. Write Notes Sheet.Cell((++startRow), 0).Value = "Notes"; Sheet.Cell(startRow, 0).Font = new Font("Arial", 12, FontStyle.Bold); Sheet.Cell((++startRow), 0).Value = oInvoiceData.Notes; startRow += 2; // 6. Add Product Listing string startAddress = ""; string endAddress = ""; Sheet.Cell((++startRow), 0).Value = "Item"; _AddAllBorders(Sheet.Cell(startRow, 0)); Sheet.Cell(startRow, 0).Font = new Font("Arial", 11, FontStyle.Bold); Sheet.Cell(startRow, 1).Value = "Quantity"; _AddAllBorders(Sheet.Cell(startRow, 1)); Sheet.Cell(startRow, 1).AlignmentHorizontal = Bytescout.Spreadsheet.Constants.AlignmentHorizontal.Right; Sheet.Cell(startRow, 1).Font = new Font("Arial", 11, FontStyle.Bold); Sheet.Cell(startRow, 2).Value = "Price"; _AddAllBorders(Sheet.Cell(startRow, 2)); Sheet.Cell(startRow, 2).AlignmentHorizontal = Bytescout.Spreadsheet.Constants.AlignmentHorizontal.Right; Sheet.Cell(startRow, 2).Font = new Font("Arial", 11, FontStyle.Bold); Sheet.Cell(startRow, 3).Value = "Total"; _AddAllBorders(Sheet.Cell(startRow, 3)); Sheet.Cell(startRow, 3).AlignmentHorizontal = Bytescout.Spreadsheet.Constants.AlignmentHorizontal.Right; Sheet.Cell(startRow, 3).Font = new Font("Arial", 11, FontStyle.Bold); for (int i = 0; i < oInvoiceData.lstProducts.Count; i++) { Sheet.Cell((++startRow), 0).Value = oInvoiceData.lstProducts[i].ProductName; _AddAllBorders(Sheet.Cell(startRow, 0)); Sheet.Cell(startRow, 1).Value = oInvoiceData.lstProducts[i].Quantity; Sheet.Cell(startRow, 1).AlignmentHorizontal = Bytescout.Spreadsheet.Constants.AlignmentHorizontal.Right; _AddAllBorders(Sheet.Cell(startRow, 1)); Sheet.Cell(startRow, 2).Value = oInvoiceData.lstProducts[i].Price; Sheet.Cell(startRow, 2).AlignmentHorizontal = Bytescout.Spreadsheet.Constants.AlignmentHorizontal.Right; _AddAllBorders(Sheet.Cell(startRow, 2)); // Calculated cell string formulaMultiplication = string.Format("={0}*{1}", Sheet.Cell(startRow, 1).GetAddress().ToString(), Sheet.Cell(startRow, 2).GetAddress().ToString()); Sheet.Cell(startRow, 3).Formula = formulaMultiplication; Sheet.Cell(startRow, 3).AlignmentHorizontal = Bytescout.Spreadsheet.Constants.AlignmentHorizontal.Right; _AddAllBorders(Sheet.Cell(startRow, 3)); // Address to be used for total sum if (i == 0) { startAddress = Sheet.Cell(startRow, 3).GetAddress().ToString(); } endAddress = Sheet.Cell(startRow, 3).GetAddress().ToString(); } Sheet.Cell((++startRow), 2).Value = "TOTAL"; Sheet.Cell(startRow, 2).Font = new Font("Arial", 11, FontStyle.Bold); Sheet.Cell(startRow, 2).AlignmentHorizontal = Bytescout.Spreadsheet.Constants.AlignmentHorizontal.Right; string formulaTotalSum = string.Format("=SUM({0}:{1})", startAddress, endAddress); Sheet.Cell(startRow, 3).Formula = formulaTotalSum; Sheet.Cell(startRow, 3).Font = new Font("Arial", 11, FontStyle.Bold); Sheet.Cell(startRow, 3).AlignmentHorizontal = Bytescout.Spreadsheet.Constants.AlignmentHorizontal.Right; // AutoFit all columns Sheet.Columns[0].AutoFit(); Sheet.Columns[1].AutoFit(); Sheet.Columns[2].AutoFit(); Sheet.Columns[3].AutoFit(); // Return all formatted document return document; } /// <summary> /// Add borders to cell /// </summary> private static void _AddAllBorders(Cell cell) { cell.LeftBorderStyle = Bytescout.Spreadsheet.Constants.LineStyle.Thin; cell.RightBorderStyle = Bytescout.Spreadsheet.Constants.LineStyle.Thin; cell.TopBorderStyle = Bytescout.Spreadsheet.Constants.LineStyle.Thin; cell.BottomBorderStyle = Bytescout.Spreadsheet.Constants.LineStyle.Thin; } /// <summary> /// Gets Sample invoice data /// </summary> private static InvoiceData GetInvoiceData() { var oRet = new InvoiceData { CompanyName = "Your Company Name", CompanyAddress1 = "Your Address", CompanyAddress2 = "City, State Zip", ClientName = "Client Name", ClientAddress1 = "Address", ClientAddress2 = "City, State Zip", InvoiceNo = "123456", InvoiceDate = DateTime.Now, Notes = "Some notes...", lstProducts = new List<InvoiceProduct> { new InvoiceProduct{ ProductName = "Product 1", Price = 30, Quantity = 10 }, new InvoiceProduct{ ProductName = "Product 2", Price = 40, Quantity = 30 }, new InvoiceProduct{ ProductName = "Product 3", Price = 50, Quantity = 15 }, new InvoiceProduct{ ProductName = "Product 4", Price = 20, Quantity = 20 } } }; return oRet; } } #region Invoice Class /// <summary> /// Invoice Data class /// </summary> public class InvoiceData { #region Constructors public InvoiceData() { lstProducts = new List<InvoiceProduct>(); } #endregion public string CompanyName { get; set; } public string CompanyAddress1 { get; set; } public string CompanyAddress2 { get; set; } public string InvoiceNo { get; set; } public DateTime InvoiceDate { get; set; } public string ClientName { get; set; } public string ClientAddress1 { get; set; } public string ClientAddress2 { get; set; } public string Notes { get; set; } public List<InvoiceProduct> lstProducts { get; set; } } /// <summary> /// Invoice Product class /// </summary> public class InvoiceProduct { public string ProductName { get; set; } public int Quantity { get; set; } public decimal Price { get; set; } } #endregion }
60 Day Free Trial or Visit ByteScout Spreadsheet SDK Home Page
Explore ByteScout Spreadsheet SDK Documentation
Explore Samples
Sign Up for ByteScout Spreadsheet SDK Online Training
Get Your API Key
Explore Web API Docs
Explore Web API Samples
60 Day Free Trial or Visit ByteScout Spreadsheet SDK Home Page
Explore ByteScout Spreadsheet SDK Documentation
Explore Samples
Sign Up for ByteScout Spreadsheet SDK Online Training
Get Your API Key
Explore Web API Docs
Explore Web API Samples