From 0ac09ec7afce3eb75e090d6fe57c4c1c6423afee Mon Sep 17 00:00:00 2001 From: joswald Date: Mon, 27 Jul 2020 18:34:21 +0200 Subject: [PATCH] Make Array Of Enum Work With Excel --- Assets/QuickSheet/Editor/ScriptGenerator.cs | 22 +++++++++++++++++-- .../ExcelPlugin/Editor/ExcelQuery.cs | 15 +++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/Assets/QuickSheet/Editor/ScriptGenerator.cs b/Assets/QuickSheet/Editor/ScriptGenerator.cs index 0347a65..2fd0bb4 100644 --- a/Assets/QuickSheet/Editor/ScriptGenerator.cs +++ b/Assets/QuickSheet/Editor/ScriptGenerator.cs @@ -199,7 +199,16 @@ private void WriteMemberField(MemberFieldData field) var fieldName = GetFieldNameForField(field); string tmp; if (field.type == CellType.Enum) - tmp = field.Name + " " + fieldName + ";"; + { + if (field.IsArrayType) + { + tmp = field.Name + "[] " + fieldName + ";"; + } + else + { + tmp = field.Name + " " + fieldName + ";"; + } + } else { if (field.IsArrayType) @@ -221,7 +230,16 @@ private void WriteProperty(MemberFieldData field) var fieldName = GetFieldNameForField(field); if (field.type == CellType.Enum) - tmp += "public " + field.Name + " " + propertyName + " "; + { + if (field.IsArrayType) + { + tmp += "public " + field.Name + "[]" + " " + propertyName + " "; + } + else + { + tmp += "public " + field.Name + " " + propertyName + " "; + } + } else { if (field.IsArrayType) diff --git a/Assets/QuickSheet/ExcelPlugin/Editor/ExcelQuery.cs b/Assets/QuickSheet/ExcelPlugin/Editor/ExcelQuery.cs index 62aacfb..f3f35fc 100644 --- a/Assets/QuickSheet/ExcelPlugin/Editor/ExcelQuery.cs +++ b/Assets/QuickSheet/ExcelPlugin/Editor/ExcelQuery.cs @@ -306,6 +306,21 @@ protected object ConvertFrom(ICell cell, Type t) if (t.GetElementType() == typeof(string)) return ConvertExt.ToStringArray((string)value); + + if (t.GetElementType().IsEnum) + { + var stringValue = cell.StringCellValue.ToString(); + var splitValues = stringValue.Split(','); + var enumArray = Array.CreateInstance(t.GetElementType(), splitValues.Length); + for (int i = 0; i < splitValues.Length; ++i) + { + string splitValue = splitValues[i]; + var enumValue = Enum.Parse(t.GetElementType(), splitValue, true); + enumArray.SetValue(enumValue, i); + } + + return enumArray; + } } // for all other types, convert its corresponding type.