private void ReadCellData(Row row)
            {
                bool dataRead = false;
                while (true)
                {
                    reader.MoveToNextElement();
                    if (reader.IsStartElement("Data"))
                    {
                        if (dataRead) throw new ApplicationException("Multiple Data elements within a Cell element");

                        row.AddCell(new Cell(ReadData()));
                        dataRead = true;
                    }

                    if (reader.IsEndElement("Cell"))
                    {
                        if (!dataRead) row.AddEmptyCell();
                        return;
                    }
                }
            }
            void ReadCell(Row row)
            {
                reader.AssertIsStartElement("Cell");

                bool isEmptyCell = reader.IsEmptyElement;
                if (isEmptyCell)
                    row.AddEmptyCell();

                CorrectForCellIndex(row);

                if (!isEmptyCell)
                    ReadCellData(row);
            }