public ExcelSheetPageViewModel(string sheetName, Lumina.Lumina lumina) { SheetColumns = new ObservableCollection <SheetColumnInfo>(); SheetPages = new ObservableCollection <ExcelPage>(); Languages = new ObservableCollection <string>(); RawRowData = new ObservableCollection <object>(); RawColumnData = new ObservableCollection <DataGridColumn>(); RawData = new ObservableCollection <object>(); // get shit _lumina = lumina; SheetName = sheetName; // break shit RawSheet = lumina.Excel.GetSheetRaw(sheetName, Language.English); Debug.Assert(RawSheet != null, "somehow the sheet name is null, shit is f****d"); HeaderFileName = RawSheet.HeaderFile.FilePath; Languages.AddRange(RawSheet.Languages.Select(l => l.ToString())); for (int i = 0; i < RawSheet.Columns.Length; i++) { var c = RawSheet.Columns[i]; var sci = new SheetColumnInfo { Index = i, Type = c.Type, Offset = c.Offset }; SheetColumns.Add(sci); } foreach (var page in RawSheet.DataPages) { var file = page.File; var rowPtrs = file.RowData; var parser = new RowParser(RawSheet, file); foreach (var rowPtr in rowPtrs.Values) { var row = new object[RawSheet.ColumnCount + 1]; row[0] = rowPtr.RowId; parser.SeekToRow(rowPtr.RowId); for (int c = 0; c < RawSheet.ColumnCount; c++) { row[c + 1] = parser.ReadColumnRaw(c); } RawData.Add(row); } } SheetPages.AddRange(RawSheet.DataPages); }