public static string ExcelTypeToManaged(ExcelColumnDataType type) { switch (type) { case ExcelColumnDataType.String: return("SeString"); case ExcelColumnDataType.Bool: return("bool"); case ExcelColumnDataType.Int8: return("sbyte"); case ExcelColumnDataType.UInt8: return("byte"); case ExcelColumnDataType.Int16: return("short"); case ExcelColumnDataType.UInt16: return("ushort"); case ExcelColumnDataType.Int32: return("int"); case ExcelColumnDataType.UInt32: return("uint"); case ExcelColumnDataType.Float32: return("float"); case ExcelColumnDataType.Int64: return("long"); case ExcelColumnDataType.UInt64: return("ulong"); case ExcelColumnDataType.PackedBool0: case ExcelColumnDataType.PackedBool1: case ExcelColumnDataType.PackedBool2: case ExcelColumnDataType.PackedBool3: case ExcelColumnDataType.PackedBool4: case ExcelColumnDataType.PackedBool5: case ExcelColumnDataType.PackedBool6: case ExcelColumnDataType.PackedBool7: return("bool"); default: throw new ArgumentOutOfRangeException(nameof(type), type, null); } }
/// <summary> /// Read a field from the current stream position /// </summary> /// <param name="type">The sheet type to read</param> /// <typeparam name="T">The CLR type to store the read data in</typeparam> /// <returns>The read data stored in the provided type</returns> /// <exception cref="ArgumentOutOfRangeException">An invalid column type was provided</exception> private T ReadField <T>(ExcelColumnDataType type) { var data = ReadFieldInternal(type); if (_sheet._Lumina.Options.ExcelSheetStrictCastingEnabled) { return((T)data); } if (data is T castedData) { return(castedData); } return(default);
/// <summary> /// Read a field from the current stream position /// </summary> /// <param name="type">The sheet type to read</param> /// <typeparam name="T">The CLR type to store the read data in</typeparam> /// <returns>The read data stored in the provided type</returns> /// <exception cref="ArgumentOutOfRangeException">An invalid column type was provided</exception> private T?ReadField <T>(ExcelColumnDataType type) { var data = ReadFieldInternal(type); if (_sheet.GameData.Options.ExcelSheetStrictCastingEnabled) { return((T)data); } // todo: this is f*****g shit but is a wip fix so that you can still ReadField< string > and get something back because 1am brain can't figure it out rn if (typeof(T) == typeof(string) && data is SeString seString) { // haha f**k you c# return((T)(object)seString.RawString); } if (data is T castedData) { return(castedData); } return(default);
private object ReadFieldInternal(ExcelColumnDataType type) { var br = _dataFile.Reader; object?data = null; switch (type) { case ExcelColumnDataType.String: { var stringOffset = br.ReadUInt32(); var raw = br.ReadRawOffsetData(_rowOffset + _sheet.Header.DataOffset + stringOffset); if (Sheet.GameData.Options.ResolveKnownRsvSheetValues) { var replacement = ReplaceRsvKeyWithValue(raw); if (replacement != null) { data = replacement; break; } } data = new SeString(raw); break; } case ExcelColumnDataType.Bool: { data = br.ReadByte() != 0; break; } case ExcelColumnDataType.Int8: { data = br.ReadSByte(); break; } case ExcelColumnDataType.UInt8: { data = br.ReadByte(); break; } case ExcelColumnDataType.Int16: { data = br.ReadInt16(); break; } case ExcelColumnDataType.UInt16: { data = br.ReadUInt16(); break; } case ExcelColumnDataType.Int32: { data = br.ReadInt32(); break; } case ExcelColumnDataType.UInt32: { data = br.ReadUInt32(); break; } // case ExcelColumnDataType.Unk: // break; case ExcelColumnDataType.Float32: { data = br.ReadSingle(); break; } case ExcelColumnDataType.Int64: { data = br.ReadUInt64(); break; } case ExcelColumnDataType.UInt64: { data = br.ReadUInt64(); break; } // case ExcelColumnDataType.Unk2: // break; case ExcelColumnDataType.PackedBool0: case ExcelColumnDataType.PackedBool1: case ExcelColumnDataType.PackedBool2: case ExcelColumnDataType.PackedBool3: case ExcelColumnDataType.PackedBool4: case ExcelColumnDataType.PackedBool5: case ExcelColumnDataType.PackedBool6: case ExcelColumnDataType.PackedBool7: { var shift = (int)type - (int)ExcelColumnDataType.PackedBool0; var bit = 1 << shift; var rawData = br.ReadByte(); data = (rawData & bit) == bit; break; } default: throw new ArgumentOutOfRangeException("type", $"invalid excel column type: {type}"); } return(data); }
public T ReadOffset <T>(int offset, ExcelColumnDataType type) { Stream.Position = _RowOffset + offset; return(ReadField <T>(type)); }
private T ReadField <T>(ExcelColumnDataType type) { var br = _DataFile.Reader; object data = null; switch (type) { case ExcelColumnDataType.String: { var stringOffset = br.ReadUInt32(); data = br.ReadStringOffset(_RowOffset + _Sheet.Header.DataOffset + stringOffset); break; } case ExcelColumnDataType.Bool: { data = br.ReadByte() != 0; break; } case ExcelColumnDataType.Int8: { data = br.ReadSByte(); break; } case ExcelColumnDataType.UInt8: { data = br.ReadByte(); break; } case ExcelColumnDataType.Int16: { data = br.ReadInt16(); break; } case ExcelColumnDataType.UInt16: { data = br.ReadUInt16(); break; } case ExcelColumnDataType.Int32: { data = br.ReadInt32(); break; } case ExcelColumnDataType.UInt32: { data = br.ReadUInt32(); break; } // case ExcelColumnDataType.Unk: // break; case ExcelColumnDataType.Float32: { data = br.ReadSingle(); break; } case ExcelColumnDataType.Int64: { data = br.ReadUInt64(); break; } case ExcelColumnDataType.UInt64: { data = br.ReadUInt64(); break; } // case ExcelColumnDataType.Unk2: // break; case ExcelColumnDataType.PackedBool0: case ExcelColumnDataType.PackedBool1: case ExcelColumnDataType.PackedBool2: case ExcelColumnDataType.PackedBool3: case ExcelColumnDataType.PackedBool4: case ExcelColumnDataType.PackedBool5: case ExcelColumnDataType.PackedBool6: case ExcelColumnDataType.PackedBool7: { var shift = (int)type - (int)ExcelColumnDataType.PackedBool0; var bit = 1 << shift; var rawData = br.ReadByte(); data = (rawData & bit) == bit; break; } default: throw new ArgumentOutOfRangeException("type", $"invalid excel column type: {type}"); } return((T)data); }