Dictionary <string, Element> ImportElements(ExcelImporter excel) { if (!excel.TryGetNamedRange("Elements", out ExcelImporter.Range range)) { throw new System.IO.InvalidDataException($"No Elements range was found!"); } var assets = GetAllAssetsOfType <Element>(); int originalCount = assets.Count; var elementsInUse = new List <Element>(); for (int row = 1; row <= range.RowCount; row++) { string name = range.GetValue <string>(row, 1); if (string.IsNullOrWhiteSpace(name)) { continue; } var element = GetOrCreateAsset(name, assets, "Elements"); elementsInUse.Add(element); } if (!excel.TryGetNamedRange("ElementMultiplier", out range)) { throw new System.IO.InvalidDataException($"No Element Multiplier range was found!"); } MarkChangesForSaving(elementCollection); elementCollection.SetElementCount(elementsInUse.Count); var multipliers = new float[elementsInUse.Count]; for (int row = 0; row < elementsInUse.Count; row++) { for (int column = 0; column < elementsInUse.Count; column++) { multipliers[column] = range.GetValue <float>(row + 1, column + 1); } elementCollection.SetElement(row, elementsInUse[row], multipliers); } Debug.Log($"Successfully imported {elementsInUse.Count} elements " + $"({assets.Count - originalCount} new, {assets.Count - elementsInUse.Count} unused)."); return(assets); }