private void GroupCellsHorizontal(IXLRange range, int[] groupRowNumbers)
        {
            IDictionary <int, (object StartCellValue, int StartColNum)> previousCellValues = new Dictionary <int, (object, int)>();
            int colsCount = range.Columns().Count();

            for (int colNum = 1; colNum <= colsCount; colNum++)
            {
                IXLRangeColumn col = range.Column(colNum);
                foreach (int rowNum in groupRowNumbers)
                {
                    object cellValue = col.Cell(rowNum).Value;
                    if (previousCellValues.TryGetValue(rowNum, out var previousResult))
                    {
                        if (!previousResult.StartCellValue.Equals(cellValue))
                        {
                            range.Range(rowNum, previousResult.StartColNum, rowNum, colNum - 1).Merge();
                            previousCellValues[rowNum] = (cellValue, colNum);
                        }
                        else if (colNum == colsCount)
                        {
                            range.Range(rowNum, previousResult.StartColNum, rowNum, colNum).Merge();
                        }
                    }
                    else
                    {
                        previousCellValues[rowNum] = (cellValue, colNum);
                    }
                }
            }
        }
        public void TableRange()
        {
            var            wb          = new XLWorkbook();
            IXLWorksheet   ws          = wb.Worksheets.Add("Sheet1");
            IXLRangeColumn rangeColumn = ws.Column(1).Column(1, 4);

            rangeColumn.Cell(1).Value = "FName";
            rangeColumn.Cell(2).Value = "John";
            rangeColumn.Cell(3).Value = "Hank";
            rangeColumn.Cell(4).Value = "Dagny";
            IXLTable table = rangeColumn.CreateTable();

            wb.NamedRanges.Add("FNameColumn", String.Format("{0}[{1}]", table.Name, "FName"));

            IXLRange namedRange = wb.Range("FNameColumn");

            Assert.AreEqual(3, namedRange.Cells().Count());
            Assert.IsTrue(
                namedRange.CellsUsed().Select(cell => cell.GetString()).SequenceEqual(new[] { "John", "Hank", "Dagny" }));
        }