public SheetSyncScheme CreateSyncScheme(Type type, ISpreadsheetDescription spreadsheetTarget) { var sheetName = type.Name; var useAllFields = true; var keyField = GoogleSheetImporterConstants.KeyField; var sheetItemAttribute = spreadsheetTarget; if (sheetItemAttribute != null) { useAllFields = sheetItemAttribute.SyncAllFields; sheetName = sheetItemAttribute.UseTypeName ? sheetName : sheetItemAttribute.SheetName; keyField = sheetItemAttribute.KeyField; } var result = new SheetSyncScheme(sheetName); var fields = LoadSyncFieldsData(type, keyField, useAllFields); result.fields = fields.ToArray(); result.keyField = result.fields. FirstOrDefault(x => x.isKeyField); return(result); }
public SyncField(FieldInfo field, string sheetValueField, bool isKeyField, SheetSyncScheme fieldScheme = null) { _fieldInfo = field; objectField = _fieldInfo.Name; sheetField = sheetValueField.TrimStart('_'); this.isKeyField = isKeyField; targetType = _fieldInfo.FieldType; syncScheme = fieldScheme; }
public IEnumerable <SyncField> SelectSheetFields(SheetSyncScheme schemaValue, SheetData data) { var columns = data.Columns; for (var i = 0; i < columns.Count; i++) { var column = columns[i]; var field = schemaValue.fields.FirstOrDefault(x => SheetData.IsEquals(x.sheetField, column.ColumnName)); if (field == null) { yield return(null); } yield return(field); } }
public IEnumerable <Object> ApplyAssets( Type filterType, string sheetId, string folder, SheetSyncScheme syncScheme, ISpreadsheetData spreadsheetData, object[] keys, Object[] assets = null, int count = -1, bool createMissing = true, string keyFieldName = "") { count = count < 0 ? keys.Length : count; count = Math.Min(keys.Length, count); var keyField = string.IsNullOrEmpty(keyFieldName) ? syncScheme.keyField : syncScheme.GetFieldBySheetFieldName(keyFieldName); try { for (var i = 0; i < count; i++) { var keyValue = keys[i]; var key = keyValue.TryConvert <string>(); var targetAsset = assets?.FirstOrDefault(x => string.Equals(keyField.GetValue(x).TryConvert <string>(), key, StringComparison.OrdinalIgnoreCase)); //create asset if missing if (targetAsset == null) { //skip asset creation step if (createMissing == false) { continue; } targetAsset = filterType.CreateAsset(); targetAsset.SaveAsset($"{filterType.Name}_{i + 1}", folder, false); Debug.Log($"Create Asset [{targetAsset}] for path {folder}", targetAsset); } //show assets progression AssetEditorTools.ShowProgress(new ProgressData() { IsDone = false, Progress = i / (float)count, Content = $"{i}:{count} {targetAsset.name}", Title = "Spreadsheet Importing" }); var spreadsheetValueInfo = new SheetValueInfo() { Source = targetAsset, SheetName = sheetId, SpreadsheetData = spreadsheetData, SyncScheme = syncScheme, SyncFieldName = keyField.sheetField, SyncFieldValue = keyValue, }; ApplyData(spreadsheetValueInfo); yield return(targetAsset); } } finally { AssetEditorTools.ShowProgress(new ProgressData() { IsDone = true, }); AssetDatabase.SaveAssets(); } }