/// <summary> /// Moves the parser to a row in the current page given its index /// </summary> /// <param name="row">The row index to seek to</param> /// <returns>true if the row was seeked to successfully, false if the row wasn't found or otherwise</returns> public bool TrySeekToRow(uint row) { Row = row; if (!_dataFile.RowData.TryGetValue(Row, out var offset)) { return(false); } _offset = offset; var br = _dataFile.Reader; Stream.Position = _offset.Offset; _rowHeader = br.ReadStructure <ExcelDataRowHeader>(); if (BitConverter.IsLittleEndian) { _rowHeader.DataSize = BinaryPrimitives.ReverseEndianness(_rowHeader.DataSize); _rowHeader.RowCount = BinaryPrimitives.ReverseEndianness(_rowHeader.RowCount); } // header is 6 bytes large, data normally starts here except in the case of variant 2 sheets but we'll keep it anyway _rowOffset = _offset.Offset + 6; return(true); }
public void SeekToRow(int row) { Row = row; _Offset = _DataFile.RowData[(uint)Row]; var br = _DataFile.Reader; Stream.Position = _Offset.Offset; _RowHeader = br.ReadStructure <ExcelDataRowHeader>(); if (BitConverter.IsLittleEndian) { _RowHeader.DataSize = BinaryPrimitives.ReverseEndianness(_RowHeader.DataSize); _RowHeader.RowCount = BinaryPrimitives.ReverseEndianness(_RowHeader.RowCount); } // header is 6 bytes large, data normally starts here except in the case of variant 2 sheets but we'll keep it anyway _RowOffset = _Offset.Offset + 6; }