---
title: Charts in Excel 2010 Using OOXML & C#
description: Charts in Excel 2010 Using OOXML & C#
image: https://blog.e-zest.com/hs-fs/file-3395201584-png/blog-files/chart-xml.png
---

[![e-Zest logo\_An accion lab company\_Colour](https://blog.e-zest.com/hubfs/images/Logos%20with%20Tagline/Corporate/SVG/e-Zest%20logo_An%20accion%20lab%20company_Colour.svg "e-Zest logo_An accion lab company_Colour")](https://www.e-zest.com/)

- [WORK](https://www.e-zest.com/our-work)
- [SERVICES](https://www.e-zest.com/our-services) 
    - [Product Engineering](https://www.e-zest.com/digital-product-engineering-services)
    - [Enterprise Data Services](https://www.e-zest.com/enterprise-data-services)
    - [Digital Commerce](https://www.e-zest.com/digital-commerce-services)
    - [Digital Operations](https://www.e-zest.com/digital-operations)
    - [Digital Consulting](https://www.e-zest.com/digital-transformation-consulting-services)
    - [Digital Experience Design](https://www.e-zest.com/digital-experience-design)
- [INSIGHTS](https://blog.e-zest.com/)
- [CAREERS](https://www.e-zest.com/careers)
- [ENTERPRISE DATA SERVICES](https://www.e-zest.com/enterprise-data-services)
- [GENERATIVE AI](https://www.e-zest.com/generative-ai)
- [Healthcare](https://healthcare.e-zest.com)
- [Contact Us](https://www.e-zest.com/contact-us)

- ![Elevating Product Engineering with AI and ML](https://blog.e-zest.com/hubfs/Elevating%20Product%20Engineering%20with%20AI%20and%20ML.jpg)

  [BLOGS](https://blog.e-zest.com)
  
  #### Elevating Product Engineering with AI and ML

  As technology evolves and customer choices broaden, there is an increasing ...

  [Read more](https://blog.e-zest.com/elevating-product-engineering-with-ai-and-ml)
- ![e-Zest – An Accion Labs Company gets Recognition as a Contender in the ISG Provider Lens™ Study on Digital Engineering Services 2024](https://blog.e-zest.com/hubfs/e-Zest%20%E2%80%93%20An%20Accion%20Labs%20Company%20-%20Gets%20Recognition%20as%20a%20Contender%20in%20the%20ISG%20Provider%20LensTM%20Study%20on%20Digital%20Engineering%20Services%202024.jpg)

  [NEWS](https://blog.e-zest.com/news)
  
  #### e-Zest – An Accion Labs Company gets Recognition as a Contender in the ISG Provider Lens™ Study on Digital Engineering Services 2024

  We are delighted to announce that e-Zest – An Accion Labs Company has been ...

  [Read more](https://blog.e-zest.com/news/e-zest-an-accion-labs-company-gets-recognition-as-a-contender-in-the-isg-provider-lens-study-on-digital-engineering-services-2024)
- ![e-Zest Solutions supports Digital Pune Mission](https://blog.e-zest.com/hubfs/blog-files/Digital%20Literacy%20Bus%20e-Zest.png)

  [CSR](https://blog.e-zest.com/csr)
  
  #### e-Zest Solutions supports Digital Pune Mission

  **Pune, India:** e-Zest Solutions, a leading digital technology innovation ...

  [Read more](https://blog.e-zest.com/csr/e-zest-solutions-supports-digital-pune-mission)

- [Work](https://www.e-zest.com/our-work)
- [Services](https://www.e-zest.com/our-services)
- [Insights](https://blog.e-zest.com)
- [Careers](https://www.e-zest.com/careers)
- [Enterprise Data](https://www.e-zest.com/enterprise-data-services)
- [Generative AI](https://www.e-zest.com/generative-ai)
- [Innovations](https://www.e-zest.com/innovations)
- [Healthcare](https://healthcare.e-zest.com)
- [About](https://www.e-zest.com/about-us)
- [Contact](https://www.e-zest.com/contact-us)

- [Blog](https://blog.e-zest.com/)
- [News](https://blog.e-zest.com/news)
- [CSR](https://blog.e-zest.com/csr)

- [![Linkedin Icon](https://blog.e-zest.com/hubfs/icons/linkedin_icon_white.svg)](https://www.linkedin.com/company/e-zest-solutions/)
- [![Twitter Icon](https://blog.e-zest.com/hubfs/twitter-logo-silhouette%20(5).svg)](https://twitter.com/ezest)
- [![Facebook Icon](https://blog.e-zest.com/hubfs/facebook-app-logo%20(4).svg)](https://www.facebook.com/61259256638)
- [![Instagram Icon](https://blog.e-zest.com/hubfs/instagram-logo%20(4).svg)](https://www.instagram.com/ezestsolutions/)
- [![Youtube Icon](https://blog.e-zest.com/hubfs/icons/youtube_icon_white.svg)](https://www.youtube.com/user/ezestcorporate)

[![Go to top icon](https://blog.e-zest.com/hubfs/AA%20Assets/top%20button.svg)](https://blog.e-zest.com/charts-in-excel-2010-using-ooxml-c-sharp/#top)

Hit enter to search or ESC to close

Insights

e-Zest members share technology ideas to foster digital transformation.

- [Blog](https://blog.e-zest.com)
- [News](https://blog.e-zest.com/news)
- [Podcasts](https://www.e-zest.com/podcasts)
- [Healthcare](https://blog.e-zest.com/healthcare)
- [CSR](https://blog.e-zest.com/csr)
- [Whitepaper](https://blog.e-zest.com/whitepaper)
- [Playbook](https://blog.e-zest.com/playbook)
- [Media Kit](https://www.e-zest.com/media-kit)

# Charts in Excel 2010 Using OOXML & C#

[Vitthal Shinde](https://blog.e-zest.com/author/vitthal-shinde)  Dec 10, 2012

[Excel 2010](https://blog.e-zest.com/topic/excel-2010) [Open Office XML](https://blog.e-zest.com/topic/open-office-xml) [OpenXML](https://blog.e-zest.com/topic/openxml) [C#](https://blog.e-zest.com/topic/c) [OOXML](https://blog.e-zest.com/topic/ooxml) [XML](https://blog.e-zest.com/topic/xml) [Microsoft .Net](https://blog.e-zest.com/topic/microsoft-net-2) [Technology](https://blog.e-zest.com/topic/technology)

- <https://www.linkedin.com/shareArticle?mini=true&url=https://blog.e-zest.com/charts-in-excel-2010-using-ooxml-c-sharp/&title=&summary=&source=>
- <https://twitter.com/intent/tweet?source=https://blog.e-zest.com/charts-in-excel-2010-using-ooxml-c-sharp/&text=Charts%20in%20Excel%202010%20Using%20OOXML%20&%20C#>
- <https://www.facebook.com/sharer/sharer.php?u=https://blog.e-zest.com/charts-in-excel-2010-using-ooxml-c-sharp/>
- <https://www.instagram.com/ezestsolutions/?u=https://blog.e-zest.com/charts-in-excel-2010-using-ooxml-c-sharp/>

Open Office XML (also known as OOXML or OpenXML) is a XML based file format developed by Microsoft for representing office documents. An OOXML file is stored in zipped, XML files.

Spreadsheet documents in OOXML mainly contain following parts,

| xl | worksheets | \_rels | sheet1.xml.rels |
| --- | --- | --- | --- |
| sheet1.xml |  |  |  |
| andxmls depending on sheets . |  |  |  |
| theme | theme1.xml |  |  |
| drawings | \_rels | drawing1.xml.rels |  |
|  | drawing1.xml |  |  |
| charts | chart1.xml |  |  |
| \_rels | workbook.xml.rels |  |  |
| workbook.xml |  |  |  |
| styles.xml |  |  |  |
| sharedStrings.xml |  |  |  |
| docProps |  |  |  |
| \_rels |  |  |  |
| \[Content\_Types\].xml |  |  |  |

We are going to talk about drawings and the chart parts in this blog.

#### **Inserting chart in Excel**

We will go through various chart objects in the following sections,

1. **DrawingsPart**
   
   To insert any type of drawing objects in office documents DrawingsPart is base part in which we append child elements.
   
   The *drawing1.xml* looks like,
   
   ```
   
   <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
   <xdr:wsDr xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing"xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
   <xdr:twoCellAnchor>
   <xdr:from>
   <xdr:col>4</xdr:col>
   <xdr:colOff>0</xdr:colOff>
   <xdr:row>5</xdr:row>
   <xdr:rowOff>0</xdr:rowOff>
   </xdr:from>
   <xdr:to>
   <xdr:col>8</xdr:col>
   <xdr:colOff>0</xdr:colOff>
   <xdr:row>13</xdr:row>
   <xdr:rowOff>0</xdr:rowOff>
   </xdr:to>
   <xdr:graphicFrame macro="">
   <xdr:nvGraphicFramePr>
   <xdr:cNvPrid="1067" name="Chart2" />
   <xdr:cNvGraphicFramePr/>
   </xdr:nvGraphicFramePr>
   <xdr:xfrm>
   <a:offx="0" y="0" />
   <a:extcx="0" cy="0" />
   </xdr:xfrm>
   <a:graphic>
   <a:graphicDatauri="http://schemas.openxmlformats.org/drawingml/2006/chart">
   <c:chartxmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relatioships" r:id="rId1" />
   </a:graphicData>
   </a:graphic>
   </xdr:graphicFrame>
   <xdr:clientData/>
   </xdr:twoCellAnchor>
   </xdr:wsDr>
   ```
   
   Key parts in above XML are,
   
   Drawing part is a common object in all sheets of spreadsheet. It can be added in worksheet part as below,
   
   ```
   
   DrawingsPartdrawingsPart = null;
   // Add a new drawing to the worksheet.
   if (worksheetPart.DrawingsPart == null)
   {
   drawingsPart = worksheetPart.AddNewPart<DrawingsPart>();
   worksheetPart.Worksheet.Append(newDocumentFormat.OpenXml.Spreadsheet.Drawing() { Id = worksheetPart.GetIdOfPart(drawingsPart) });
   worksheetPart.Worksheet.Save();
   }
   else
   {
   drawingsPart = worksheetPart.DrawingsPart;
   }
   ```
   
     1. **TwoCellAnchor:**
        
        TwoCellAnchor is used to set chart position in worksheet. It can be set by using the following two classes,
        
            1. **FromMarker**
        
        FromMarker is used to specify from position of chart using From excel column and From excel row.
        
            2. **ToMarker**
        
        ToMarker is used to specify position of chart using To excel column and To excel row.
        
        Following code specifies position of charts,
        
        ```
        
        // Position the chart on the worksheet using a TwoCellAnchor object.
        if (drawingsPart.WorksheetDrawing == null)
        drawingsPart.WorksheetDrawing = newWorksheetDrawing();
        
        TwoCellAnchortwoCellAnchor = drawingsPart.WorksheetDrawing.AppendChild &lsaquo;TwoCellAnchor &rsaquo;(newTwoCellAnchor());
        twoCellAnchor.Append
        (
        newDocumentFormat.OpenXml.Drawing.Spreadsheet.FromMarker
        (
        newColumnId("5"),
        newColumnOffset("0"),
        newRowId("5"),
        newRowOffset("0")
        )
        );
        twoCellAnchor.Append
        (
        newDocumentFormat.OpenXml.Drawing.Spreadsheet.ToMarker
        (
        newColumnId("10"),
        newColumnOffset("0"),
        newRowId("15"),
        newRowOffset("0")
        )
        );
        ```
     2. **GraphicFrame:**
   
   Frame of the graph can be added using GraphicFrame. Following code adds frame of the chart,
   
   ```
   
   // Append a GraphicFrame to the TwoCellAnchor object.
   DocumentFormat.OpenXml.Drawing.Spreadsheet.GraphicFramegraphicFrame = twoCellAnchor.AppendChild &lsaquo;DocumentFormat.OpenXml.Drawing.Spreadsheet.GraphicFrame &rsaquo;(newDocumentFormat.OpenXml.Drawing.Spreadsheet.GraphicFrame());
   graphicFrame.Macro = "";
   
   graphicFrame.Append
               (
   new DocumentFormat.OpenXml.Drawing.Spreadsheet.NonVisualGraphicFrameProperties
                   (
   new DocumentFormat.OpenXml.Drawing.Spreadsheet.NonVisualDrawingProperties() { Id = 2u, Name = "Chart2";},
   new DocumentFormat.OpenXml.Drawing.Spreadsheet.NonVisualGraphicFrameDrawingProperties()
                   )
               );
   graphicFrame.Append(newTransform(newDocumentFormat.OpenXml.Drawing.Offset() { X = 0L, Y = 0L }, newDocumentFormat.OpenXml.Drawing.Extents() { Cx = 0L, Cy = 0L }));
   
   graphicFrame.Append(newDocumentFormat.OpenXml.Drawing.Graphic(newDocumentFormat.OpenXml.Drawing.GraphicData(newChartReference() { Id = drawingsPart.GetIdOfPart(chartPart) }) { Uri = "http://schemas.openxmlformats.org/drawingml/2006/chart" }));
   
   twoCellAnchor.Append(newClientData());
   
   // Save the WorksheetDrawing object.
   drawingsPart.WorksheetDrawing.Save();
   ```
2. **ChartPart**
   
   We can create new Chart using ChartPart class. Following code creates new chart and sets it’s editing culture,
   
   ```
   
   // Add a new chart and set the chart language to English-US.
   ChartPartchartPart = drawingsPart.AddNewPart<ChartPart>();
   chartPart.ChartSpace = newChartSpace();
   chartPart.ChartSpace.Append(newEditingLanguage() { Val = newStringValue("en-US") });
   ```
   
   Chart can be created using,
   
   ```
   
   DocumentFormat.OpenXml.Drawing.Charts.Chart chart =
   chartPart.ChartSpace.AppendChild &lsaquo;DocumentFormat.OpenXml.Drawing.Charts.Chart&rsaquo;(newDocumentFormat.OpenXml.Drawing.Charts.Chart());
   
   chart.AppendChild<AutoTitleDeleted>(newAutoTitleDeleted() { Val = BooleanValue.FromBoolean(false) });
   
   chart.Append(newPlotVisibleOnly() { Val = newBooleanValue(true) });
   chart.Append(newDisplayBlanksAs() { Val = DisplayBlanksAsValues.Gap });
   ```
   
   Once Chart is created, Chart plot area can be created using,
   
   ```
   
   PlotAreaplotArea = chart.AppendChild &lsaquo;PlotArea&rsaquo;(newPlotArea());
   ```
   
   Chart plot area is main chart object which is used to create objects like Layout, BarChart, Chart axes.
   
     1. **Barchart**
        
        In this blog we are going to create Bar chart. Bar chart, chart series and other properties of bar chart that can be created using,
        
        ```
        
        Layoutlayout = plotArea.AppendChild<Layout>(newLayout());
        BarChartbarChart = plotArea.AppendChild<BarChart>
         (
        newBarChart
              (
        newBarDirection() { Val = newEnumValue &lsaquo;BarDirectionValues &rsaquo;(BarDirectionValues.Bar) },
        newBarGrouping() { Val = newEnumValue &lsaquo;BarGroupingValues &rsaquo;(BarGroupingValues.Clustered) }
        )
        );
        ```
        
        And add chart axis as below,
        
        ```
        
        barChart.Append(newAxisId() { Val = newUInt32Value(48650112u) });
        barChart.Append(newAxisId() { Val = newUInt32Value(48672768u) });
        ```
        
        Bar Chart has the following part,
        
            1. **BarChartSeries**
        
        Chart series is created using the following code,
        
        ```
        
        BarChartSeriesbarChartSeries = barChart.AppendChild<BarChartSeries>
        (
        newBarChartSeries
        (
        newIndex() { Val = newUInt32Value(0u) },
        newOrder() { Val = newUInt32Value(0u) },
        newSeriesText(newNumericValue() { Text = chartDetails.ChartTitle })
        )
        );
        ```
        
            2. **DataPoint**
        
        Data points are nothing but bars in Bar charts. These bars can be formatted using
        
        ```
        
        DataPointdpFirstName  =barChartSeries.AppendChild &lsaquo;DataPoint&rsaquo;(newDataPoint());
        dpFirstName.Index = newIndex();
        dpFirstName.Index.Val = 0u;
        dpFirstName.InvertIfNegative = newInvertIfNegative() { Val = BooleanValue.FromBoolean(true) };
        dpFirstName.Bubble3D = newBubble3D() { Val = BooleanValue.FromBoolean(false) };
        
        DocumentFormat.OpenXml.Drawing.Charts.ShapePropertiesspDataPoint = dpFirstName.AppendChild<DocumentFormat.OpenXml.Drawing.Charts.ShapeProperties>
         (
        	newDocumentFormat.OpenXml.Drawing.Charts.ShapeProperties()
        );
        spDataPoint.Append(newDocumentFormat.OpenXml.Drawing.SolidFill() { RgbColorModelHex = newDocumentFormat.OpenXml.Drawing.RgbColorModelHex() { Val = newHexBinaryValue("FF00FF") } });
        ```
        
        Color of each bar can be changed using the above code. Index objectofdata pointis referred for each bar in bar chart starting from 0.
        
            3. **CategoryAxisData**
        
        Category axis values are mentioned using following code,
        
        ```
        
        CategoryAxisDataobjCAD = barChartSeries.AppendChild &lsaquo;CategoryAxisData &rsaquo;(newCategoryAxisData());
        
        StringReferencestrRef = newStringReference();
        
        strRef.Formula = newDocumentFormat.OpenXml.Drawing.Charts.Formula("Sheet1!$B$2:$B$5");
        strRef.StringCache = newStringCache();
        strRef.StringCache.PointCount = newPointCount() { Val = Convert.ToUInt32(data.Keys.Count) };
        
        uintkeyCnt = 0;
        
        foreach (string key indata.Keys)
        {
        strRef.StringCache.AppendChild &lsaquo;NumericPoint &rsaquo;(newNumericPoint() { Index = keyCnt, NumericValue = newNumericValue(key) });
        }
        
        objCAD.AppendChild<StringReference>(strRef);
        ```
        
        Here data is input data and its object type isDictionary.
        
            4. **Values**
        
        Series values are mentioned using the following code,
        
        ```
        
        DocumentFormat.OpenXml.Drawing.Charts.Values values = barChartSeries.AppendChild &lsaquo;DocumentFormat.OpenXml.Drawing.Charts.Values &rsaquo;(newDocumentFormat.OpenXml.Drawing.Charts.Values());
        
        NumberReferencenumRef = newNumberReference();
        
        numRef.Formula = newDocumentFormat.OpenXml.Drawing.Charts.Formula("Sheet1!$C$2:$C$5");
        numRef.NumberingCache = newNumberingCache();
        numRef.NumberingCache.PointCount = newPointCount() { Val = Convert.ToUInt32(data.Keys.Count) };
        
        uintkeyCnt = 0;
        
        foreach (string key indata.Keys)
        {
        numRef.NumberingCache.AppendChild<NumericPoint>(newNumericPoint() { Index = keyCnt, NumericValue = newNumericValue(data[key].ToString()) });
        keyCnt++;
        }
        values.AppendChild<NumberReference>(numRef);
        ```
        
        Here data is input data and its object type isDictionary.
     2. **CategoryAxis**
   
   Category axis is used to specify values like axis id, scaling, axis position, crossing axis and so on.
   
   Following code creates category axis
   
   ```
   
   CategoryAxiscatAx = plotArea.AppendChild<CategoryAxis>
   (
   newCategoryAxis
         (
   		newAxisId() { Val = newUInt32Value(48650112u) },
   newScaling(newOrientation() { Val = newEnumValue<DocumentFormat.OpenXml.Drawing.Charts.OrientationValues>(DocumentFormat.OpenXml.Drawing.Charts.OrientationValues.MinMax) }),
   newAxisPosition() { Val = newEnumValue<AxisPositionValues>(AxisPositionValues.Left) },
   newDelete() { Val = newBooleanValue(false) },
   newTickLabelPosition() { Val = newEnumValue<TickLabelPositionValues>(TickLabelPositionValues.Low) },
   newCrossingAxis() { Val = newUInt32Value(48672768U) },
   newCrosses() { Val = newEnumValue<CrossesValues>(CrossesValues.AutoZero) },
   newAutoLabeled() { Val = newBooleanValue(true) },
   newLabelAlignment() { Val = newEnumValue<LabelAlignmentValues>(LabelAlignmentValues.Center) },
   newLabelOffset() { Val = newUInt16Value((ushort)100) },
   newNoMultiLevelLabels() { Val = newBooleanValue(false) }
   )
   );
   ```
   
     3. **ValueAxis**
   
   Value axis is same as Category axis, it is used to specify values like axis id, scaling, axis position, crossing axis and so on.
   
   Following code creates value axis,
   
   ```
   
   // Add the Value Axis.
   ValueAxisvalAx = plotArea.AppendChild &lsaquo;ValueAxis&rsaquo;
   (
   newValueAxis
   (
   newAxisId() { Val = newUInt32Value(48672768u) },
   newScaling(newOrientation() { Val = newEnumValue &lsaquo;DocumentFormat.OpenXml.Drawing.Charts.OrientationValues &rsaquo;(DocumentFormat.OpenXml.Drawing.Charts.OrientationValues.MinMax) }, newMaxAxisValue() { Val = newDocumentFormat.OpenXml.DoubleValue(Convert.ToDouble(100)) }),
   newAxisPosition() { Val = newEnumValue<AxisPositionValues>(AxisPositionValues.Left) },
   newMajorGridlines(),
   newDelete() { Val = newBooleanValue(false) },
   newDocumentFormat.OpenXml.Drawing.Charts.NumberingFormat() { FormatCode = newStringValue("General"), SourceLinked = newBooleanValue(true) },
   newTickLabelPosition() { Val = newEnumValue &lsaquo;TickLabelPositionValues&rsaquo;(TickLabelPositionValues.NextTo) },
   newCrossingAxis() { Val = newUInt32Value(48650112U) },
   newCrosses() { Val = newEnumValue &lsaquo;CrossesValues &rsaquo;(CrossesValues.AutoZero) },
   newCrossBetween() { Val = newEnumValue &lsaquo;CrossBetweenValues &rsaquo;(CrossBetweenValues.Between) }
   )
   );
   ```
   
   Chart XML, *chart1.xml*, looks like,
   
   ![](https://blog.e-zest.com/hs-fs/file-3395201584-png/blog-files/chart-xml.png?width=415&height=676&name=chart-xml.png)
3. **Final Details**

A sample bar chart generated using the above code is shown below

![](https://blog.e-zest.com/hs-fs/file-3395201594-png/blog-files/charts-excel-2010-ooxml.png?width=425&height=346&name=charts-excel-2010-ooxml.png)

[Click here](http://code.google.com/p/my-experiement-with-charts/downloads/list) to download Final code of inserting bar charts in Excel using OOXML and C#.

- <https://twitter.com/intent/tweet?source=https://blog.e-zest.com/charts-in-excel-2010-using-ooxml-c-sharp/&text=Charts%20in%20Excel%202010%20Using%20OOXML%20&%20C#>
- <https://www.facebook.com/sharer/sharer.php?u=https://blog.e-zest.com/charts-in-excel-2010-using-ooxml-c-sharp/>
- <https://www.linkedin.com/shareArticle?mini=true&url=https://blog.e-zest.com/charts-in-excel-2010-using-ooxml-c-sharp/&title=&summary=&source=>

### Similar Blog

## Helping Organizations Thrive in the Digital Age

[Contact Us](https://www.e-zest.com/contact-us)

- [About](https://www.e-zest.com/about-us)
- [Services](https://www.e-zest.com/our-services)
- [Work](https://www.e-zest.com/our-work)
- [Insights](https://blog.e-zest.com/)
- [Healthcare](https://healthcare.e-zest.com/)
- [Accion Labs](https://www.accionlabs.com/)

- <https://www.linkedin.com/company/e-zest-solutions/>
- <https://twitter.com/ezest>
- <https://www.facebook.com/eZest/>
- <https://www.instagram.com/ezestsolutions/>
- <https://www.youtube.com/user/ezestcorporate>

- Dallas
- Detroit
- Hannover
- Vienna
- London
- Pune

 © 2025 e-Zest Solutions

- [Privacy Policy](https://www.e-zest.com/privacypolicy)
- [Cookie Policy](https://www.e-zest.com/cookie-policy)

 Contact us

 Contact us

e-Zest is a leading digital innovation partner for enterprises and technology companies that utilizes emerging technologies for creating engaging customers experiences. Being a customer-focused and technology-driven company, it always helps clients in crafting holistic business value for their software development efforts. It offers software development and consulting services for cloud computing, enterprise mobility, big data and analytics, user experience and digital commerce.