ExcelHelper Class

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using DocumentFormat.OpenXml;

using DocumentFormat.OpenXml.Packaging;

using DocumentFormat.OpenXml.Spreadsheet;

using DocumentFormat.OpenXml.Office2013.Drawing.ChartStyle;

using System.Data;

using System.IO.Packaging;

using System.IO;

namespace AI_Portal_Cloud.DAL

{

    public class ExcelOperation

    {

        public static void GetExcelSheetfromTemplete(DataSet ds, string excelpath)

        {

            Package spreadsheetPackage = Package.Open(excelpath, FileMode.Open, FileAccess.ReadWrite);

            using (var document = SpreadsheetDocument.Open(spreadsheetPackage))

            {

                foreach (System.Data.DataTable table in ds.Tables)

                {

                    var workbookPart = document.WorkbookPart;

                    var workbook = workbookPart.Workbook;

                    var sheet = workbookPart.Workbook.Descendants<Sheet>().FirstOrDefault();

                    Worksheet ws = ((WorksheetPart)(workbookPart.GetPartById(sheet.Id))).Worksheet;

                    SheetData sheetData = ws.GetFirstChild<SheetData>();

                    sheetData.RemoveAllChildren();

                    if (sheet == null)

                        throw new Exception("No sheed found in the template file. Please add the sheet");

                    bool flag = false;

                    var worksheetPart = (WorksheetPart)workbookPart.GetPartById(sheet.Id);

                    var sharedStringPart = workbookPart.SharedStringTablePart;

                    var values = sharedStringPart.SharedStringTable.Elements<SharedStringItem>().ToArray();

                    var rows = worksheetPart.Worksheet.Descendants<Row>();

                    DocumentFormat.OpenXml.Spreadsheet.Row headerRow = new DocumentFormat.OpenXml.Spreadsheet.Row();

                    List<String> columns = new List<string>();

                    foreach (System.Data.DataColumn column in table.Columns)

                    {

                        columns.Add(column.ColumnName);

                        DocumentFormat.OpenXml.Spreadsheet.Cell cell = new DocumentFormat.OpenXml.Spreadsheet.Cell();

                        cell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.String;

                        cell.CellValue = new DocumentFormat.OpenXml.Spreadsheet.CellValue(column.ColumnName);

                        headerRow.AppendChild(cell);

                    }

                    sheetData.AppendChild(headerRow);

                    foreach (System.Data.DataRow dsrow in table.Rows)

                    {

                        DocumentFormat.OpenXml.Spreadsheet.Row newRow = new DocumentFormat.OpenXml.Spreadsheet.Row();

                        foreach (String col in columns)

                        {

                            DocumentFormat.OpenXml.Spreadsheet.Cell cell = new DocumentFormat.OpenXml.Spreadsheet.Cell();

                            cell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.String;

                            cell.CellValue = new DocumentFormat.OpenXml.Spreadsheet.CellValue(dsrow[col].ToString()); //

                            newRow.AppendChild(cell);

                        }

                        sheetData.AppendChild(newRow);

                    }

                }

            }

        }

        public static void GetExcelSheet(DataSet ds, string destination)

        {

            using (var workbook = SpreadsheetDocument.Create(destination, DocumentFormat.OpenXml.SpreadsheetDocumentType.Workbook))

            {

                var workbookPart = workbook.AddWorkbookPart();

                workbook.WorkbookPart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook();

                workbook.WorkbookPart.Workbook.Sheets = new DocumentFormat.OpenXml.Spreadsheet.Sheets();

                foreach (System.Data.DataTable table in ds.Tables)

                {

                    var sheetPart = workbook.WorkbookPart.AddNewPart<WorksheetPart>();

                    var sheetData = new DocumentFormat.OpenXml.Spreadsheet.SheetData();

                    sheetPart.Worksheet = new DocumentFormat.OpenXml.Spreadsheet.Worksheet(sheetData);

                    DocumentFormat.OpenXml.Spreadsheet.Sheets sheets = workbook.WorkbookPart.Workbook.GetFirstChild<DocumentFormat.OpenXml.Spreadsheet.Sheets>();

                    string relationshipId = workbook.WorkbookPart.GetIdOfPart(sheetPart);

                    uint sheetId = 1;

                    if (sheets.Elements<DocumentFormat.OpenXml.Spreadsheet.Sheet>().Count() > 0)

                    {

                        sheetId =

                            sheets.Elements<DocumentFormat.OpenXml.Spreadsheet.Sheet>().Select(s => s.SheetId.Value).Max() + 1;

                    }

                    DocumentFormat.OpenXml.Spreadsheet.Sheet sheet = new DocumentFormat.OpenXml.Spreadsheet.Sheet() { Id = relationshipId, SheetId = sheetId, Name = table.TableName };

                    sheets.Append(sheet);

                    DocumentFormat.OpenXml.Spreadsheet.Row headerRow = new DocumentFormat.OpenXml.Spreadsheet.Row();

                    List<String> columns = new List<string>();

                    foreach (System.Data.DataColumn column in table.Columns)

                    {

                        columns.Add(column.ColumnName);

                        DocumentFormat.OpenXml.Spreadsheet.Cell cell = new DocumentFormat.OpenXml.Spreadsheet.Cell();

                        cell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.String;

                        cell.CellValue = new DocumentFormat.OpenXml.Spreadsheet.CellValue(column.ColumnName);

                        headerRow.AppendChild(cell);

                    }

                    sheetData.AppendChild(headerRow);

                    foreach (System.Data.DataRow dsrow in table.Rows)

                    {

                        DocumentFormat.OpenXml.Spreadsheet.Row newRow = new DocumentFormat.OpenXml.Spreadsheet.Row();

                        foreach (String col in columns)

                        {

                            DocumentFormat.OpenXml.Spreadsheet.Cell cell = new DocumentFormat.OpenXml.Spreadsheet.Cell();

                            cell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.String;

                            cell.CellValue = new DocumentFormat.OpenXml.Spreadsheet.CellValue(dsrow[col].ToString()); //

                            newRow.AppendChild(cell);

                        }

                        sheetData.AppendChild(newRow);

                    }

                }

            }

        }

        public static System.Data.DataTable GetDataTable(string excelpath)

        {

            //Open the Excel file in Read Mode using OpenXml.

            using (SpreadsheetDocument doc = SpreadsheetDocument.Open(excelpath, false))

            {

                //Read the first Sheet from Excel file.m

                Sheet sheet = doc.WorkbookPart.Workbook.Sheets.GetFirstChild<Sheet>();

                var test = doc.WorkbookPart.Workbook.Sheets.GetFirstChild<Sheet>().Id;

                //Get the Worksheet instance.

                Worksheet worksheet = (doc.WorkbookPart.GetPartById(sheet.Id.Value) as WorksheetPart).Worksheet;

                //get second sheet by static id

                //Worksheet worksheet = (doc.WorkbookPart.GetPartById("rId2") as WorksheetPart).Worksheet;

                //Fetch all the rows present in the Worksheet.

                IEnumerable<Row> rows = worksheet.GetFirstChild<SheetData>().Descendants<Row>();

                //Create a new DataTable.

                System.Data.DataTable dt = new System.Data.DataTable();

                //Loop through the Worksheet rows.

                foreach (Row row in rows)

                {

                    //Use the first row to add columns to DataTable.

                    if (row.RowIndex.Value == 1)

                    {

                        int i = 0;

                        foreach (Cell cell in row.Descendants<Cell>())

                        {

                            if (i != 20)

                            {

                                dt.Columns.Add(GetValue(doc, cell));

                                i++;

                            }

                        }

                    }

                    else

                    {

                        //if(row.RowIndex.Value==3)

                        //{

                        //    var tesddt = rows.Select(j=>j.Elements.where(row.RowIndex.Value).FirstOrDefault();

                        //}

                        //Add rows to DataTable.

                        dt.Rows.Add();

                        int i = 0;

                        foreach (Cell cell in row.Descendants<Cell>())

                        {

                            if (i != 20)

                            {

                                dt.Rows[dt.Rows.Count - 1][i] = GetValue(doc, cell);

                                i++;

                            }

                        }

                    }

                }

                return dt;

            }

        }

        public static string GetValue(SpreadsheetDocument doc, Cell cell)

        {

            if (cell.CellValue == null) return "";

            string value = cell.CellValue.InnerText;

            if (cell.DataType != null && cell.DataType.Value == CellValues.SharedString)

            {

                if (!string.IsNullOrEmpty(doc.WorkbookPart.SharedStringTablePart.SharedStringTable.ChildElements.GetItem(int.Parse(value)).InnerText))

                {

                    return doc.WorkbookPart.SharedStringTablePart.SharedStringTable.ChildElements.GetItem(int.Parse(value)).InnerText;

                }

                else

                {

                    return "";

                }

            }

            return value;

        }

        public void InsertText(string docName, string text, string col, uint row)

        {

            using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docName, true))

            {

                WorkbookPart workbookPart = spreadSheet.WorkbookPart;

                Sheet sheet = workbookPart.Workbook.Descendants<Sheet>().FirstOrDefault();

                WorksheetPart worksheetPart = workbookPart.GetPartById(sheet.Id) as WorksheetPart;

                Cell cell = InsertCellInWorksheet(col, row, worksheetPart);

                cell.CellValue = new CellValue(text.ToString());

                cell.DataType = new EnumValue<CellValues>(CellValues.String);

                worksheetPart.Worksheet.Save();

            }

        }

        private static Cell InsertCellInWorksheet(string columnName, uint rowIndex, WorksheetPart worksheetPart)

        {

            Worksheet worksheet = worksheetPart.Worksheet;

            SheetData sheetData = worksheet.GetFirstChild<SheetData>();

            string cellReference = columnName + rowIndex;

            Row row;

            if (sheetData.Elements<Row>().Where(r => r.RowIndex == rowIndex).Count() != 0)

            {

                row = sheetData.Elements<Row>().Where(r => r.RowIndex == rowIndex).First();

            }

            else

            {

                row = new Row() { RowIndex = rowIndex };

                sheetData.Append(row);

            }

            if (row.Elements<Cell>().Where(c => c.CellReference.Value == columnName + rowIndex).Count() > 0)

            {

                return row.Elements<Cell>().Where(c => c.CellReference.Value == cellReference).First();

            }

            else

            {

                Cell refCell = null;

                foreach (Cell cell in row.Elements<Cell>())

                {

                    if (string.Compare(cell.CellReference.Value, cellReference, true) > 0)

                    {

                        refCell = cell;

                        break;

                    }

                }

                Cell newCell = new Cell() { CellReference = cellReference };

                row.InsertBefore(newCell, refCell);

                worksheet.Save();

                return newCell;

            }

        }


    }

Comments

Popular posts from this blog

Npgsql query and format with output parameters

Return DataSet from Npgsql with multiple result set as Tables