/// <summary> /// Reverses the endianness of a data file on LE machines so the underlying stream can be copied from as is /// </summary> /// <param name="file">The file to swap endianness for</param> // todo: refactor and move into ExceLDataFile protected void ProcessDataEndianness(ExcelDataFile file) { if (!BitConverter.IsLittleEndian) { return; } if (file.SwappedEndianness) { return; } var stream = new MemoryStream(file.Data); var writer = new BinaryWriter(stream); var reader = new BinaryReader(stream); foreach (var row in file.RowData.Values) { var offset = row.Offset; stream.Position = offset; if (Variant == ExcelVariant.Subrows) { var rowHdr = reader.ReadStructure <ExcelDataRowHeader>(); rowHdr.RowCount = BinaryPrimitives.ReverseEndianness(rowHdr.RowCount); rowHdr.DataSize = BinaryPrimitives.ReverseEndianness(rowHdr.DataSize); for (var i = 0; i < rowHdr.RowCount; i++) { var subRowOffset = row.Offset + 6 + (i * Header.DataOffset + 2 * (i + 1)); stream.Position = subRowOffset; ProcessDataRow(subRowOffset, stream, writer, reader); } } else { // skip header ProcessDataRow(offset + 6, stream, writer, reader); } } file.SwappedEndianness = true; }
public RowParser(ExcelSheetImpl sheet, ExcelDataFile dataFile) { _sheet = sheet; _dataFile = dataFile; }
public RowParser(ExcelSheetImpl sheet, ExcelDataFile dataFile, uint row, uint subRow) : this(sheet, dataFile, row) { SeekToRow(row, subRow); }
public RowParser(ExcelSheetImpl sheet, ExcelDataFile dataFile, int row) : this(sheet, dataFile) { SeekToRow(row); }