public string ExportToExcel(List <List <string> > dataRows, List <string> columnTitles = null, string sheetName = null)
        {
            #region Validation

            if (dataRows == null || dataRows.Count == 0)
            {
                return(null);
            }

            if (string.IsNullOrWhiteSpace(sheetName))
            {
                sheetName = "Sheet1";
            }

            if (columnTitles != null && columnTitles.Count != dataRows[0].Count)
            {
                columnTitles = null;
            }

            #endregion

            using (var memoryStream = new MemoryStream())
            {
                try
                {
                    var spreadsheetDocument = SpreadsheetDocument.Create(memoryStream, SpreadsheetDocumentType.Workbook);

                    // Add a WorkbookPart to the document.
                    WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
                    workbookpart.Workbook = new Workbook();

                    // Add a WorksheetPart to the WorkbookPart.
                    WorksheetPart worksheetPart = workbookpart.AddNewPart <WorksheetPart>();
                    worksheetPart.Worksheet = new Worksheet(new SheetData());

                    // Add Sheets to the Workbook.
                    Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild(new Sheets());

                    // Append a new worksheet and associate it with the workbook.
                    Sheet sheet = new Sheet()
                    {
                        Id      = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart),
                        SheetId = 1,
                        Name    = sheetName
                    };
                    sheets.Append(sheet);



                    int firstRowPos = 1;
                    if (columnTitles != null)
                    {
                        for (var colIdx = 1; colIdx <= columnTitles.Count; colIdx++)
                        {
                            worksheetPart.InsertString(colIdx, firstRowPos, columnTitles[colIdx - 1]);
                        }

                        firstRowPos++;
                    }


                    for (var rowIdx = firstRowPos; rowIdx < dataRows.Count + firstRowPos; rowIdx++)
                    {
                        for (var colIdx = 1; colIdx <= dataRows[rowIdx - firstRowPos].Count; colIdx++)
                        {
                            worksheetPart.InsertString(colIdx, rowIdx, dataRows[rowIdx - firstRowPos][colIdx - 1]);
                        }
                    }



                    workbookpart.Workbook.Save();
                    spreadsheetDocument.Close();

                    memoryStream.Seek(0, SeekOrigin.Begin);

                    var data   = memoryStream.ToBytes();
                    var dataId = SaveData(data);

                    return(dataId);
                }
                catch (Exception ex)
                {
                    return(null);
                }
            }
        }