Example #1
0
        public static DataTable GetDataTableFromExcel(this ExcelPackage package, string worksheet, int?startHeader, int?startBody, int?columns = null)
        {
            ExcelWorksheet ws = null;

            if (string.IsNullOrWhiteSpace(worksheet))
            {
                ws = package.Workbook.Worksheets.First();
            }
            else
            {
                ws = package.Workbook.Worksheets[worksheet];
            }

            using (DataTable dt = new DataTable())
            {
                foreach (ExcelRangeBase firstRowCell in ws.Cells[(startHeader ?? startBody).Value, 1, 1, columns ?? ws.Dimension.End.Column])
                {
                    dt.Columns.Add(startHeader.HasValue ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column));
                }

                for (int rowNum = startBody.Value; rowNum <= ws.Dimension.End.Row; rowNum++)
                {
                    ExcelRangeBase wsRow = ws.Cells[rowNum, 1, rowNum, columns ?? ws.Dimension.End.Column];

                    // Only rows with text
                    if (wsRow.Any() && wsRow.Any(o => string.IsNullOrWhiteSpace(o.Text) == false))
                    {
                        DataRow row = dt.NewRow();

                        foreach (ExcelRangeBase cell in wsRow)
                        {
                            if (dt.Columns.Count < cell.Start.Column)
                            {
                                break;
                            }

                            row[cell.Start.Column - 1] = cell.Text;
                        }

                        dt.Rows.Add(row);
                    }
                }

                return(dt);
            }
        }