From 20fbaa4fa879f7516ae16bbd4b3b3fd10a00ea18 Mon Sep 17 00:00:00 2001 From: coffee <985942825@qq.com> Date: Wed, 12 Feb 2025 23:49:27 +0800 Subject: [PATCH] TExcel --- .../ExcelResolver/Editor/Core/Types/TExcel.cs | 31 ++++++ .../Editor/Core/Types/TExcel.cs.meta | 3 + .../Core/Util/ExcelResolverUtil.TType.cs | 97 +++++++++++------- .../Core/Util/ExcelResolverUtil.Type.cs | 2 +- .../ExcelResolverEditorWindow.ReadExcel.cs | 2 +- .../Editor/ExcelResolverEditorWindow.cs | 5 +- .../_Project/ExcelResolver/Excel/##hero.xlsx | Bin 21159 -> 0 bytes .../Excel/{testExcel.xlsx => Hero.xlsx} | Bin 11340 -> 11396 bytes .../{testExcel.xlsx.meta => Hero.xlsx.meta} | 0 Assets/_Project/ExcelResolver/Excel/Pet.xlsx | Bin 0 -> 11121 bytes .../Excel/{##hero.xlsx.meta => Pet.xlsx.meta} | 2 +- .../Excel/{testExcel.meta => Hero.meta} | 2 +- .../testExcel_6.asset => Hero/Hero_1.asset} | 5 +- .../Hero_1.asset.meta} | 2 +- .../Excel/Hero/_HeroUtil.asset | 56 ++++++++++ .../_HeroUtil.asset.meta} | 2 +- .../_Project/ScriptableObject/Excel/Pet.meta | 8 ++ .../_testExcelUtil.asset => Pet/Pet_1.asset} | 7 +- .../Excel/Pet/Pet_1.asset.meta | 8 ++ .../ScriptableObject/Excel/Pet/_PetUtil.asset | 56 ++++++++++ .../Excel/Pet/_PetUtil.asset.meta | 8 ++ .../Generator/Excel/{testExcel.cs => Hero.cs} | 9 +- .../Scripts/Generator/Excel/Hero.cs.meta | 2 + .../Scripts/Generator/Excel/HeroUtil.cs | 25 +++++ .../Scripts/Generator/Excel/HeroUtil.cs.meta | 2 + .../_Project/Scripts/Generator/Excel/Pet.cs | 28 +++++ .../Scripts/Generator/Excel/Pet.cs.meta | 2 + .../Excel/{testExcelUtil.cs => PetUtil.cs} | 4 +- .../Scripts/Generator/Excel/PetUtil.cs.meta | 2 + .../Scripts/Generator/Excel/testExcel.cs.meta | 2 - .../Generator/Excel/testExcelUtil.cs.meta | 2 - 31 files changed, 315 insertions(+), 59 deletions(-) create mode 100644 Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TExcel.cs create mode 100644 Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TExcel.cs.meta delete mode 100644 Assets/_Project/ExcelResolver/Excel/##hero.xlsx rename Assets/_Project/ExcelResolver/Excel/{testExcel.xlsx => Hero.xlsx} (54%) rename Assets/_Project/ExcelResolver/Excel/{testExcel.xlsx.meta => Hero.xlsx.meta} (100%) create mode 100644 Assets/_Project/ExcelResolver/Excel/Pet.xlsx rename Assets/_Project/ExcelResolver/Excel/{##hero.xlsx.meta => Pet.xlsx.meta} (74%) rename Assets/_Project/ScriptableObject/Excel/{testExcel.meta => Hero.meta} (77%) rename Assets/_Project/ScriptableObject/Excel/{testExcel/testExcel_6.asset => Hero/Hero_1.asset} (85%) rename Assets/_Project/ScriptableObject/Excel/{testExcel/_testExcelUtil.asset.meta => Hero/Hero_1.asset.meta} (79%) create mode 100644 Assets/_Project/ScriptableObject/Excel/Hero/_HeroUtil.asset rename Assets/_Project/ScriptableObject/Excel/{testExcel/testExcel_6.asset.meta => Hero/_HeroUtil.asset.meta} (79%) create mode 100644 Assets/_Project/ScriptableObject/Excel/Pet.meta rename Assets/_Project/ScriptableObject/Excel/{testExcel/_testExcelUtil.asset => Pet/Pet_1.asset} (74%) create mode 100644 Assets/_Project/ScriptableObject/Excel/Pet/Pet_1.asset.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Pet/_PetUtil.asset create mode 100644 Assets/_Project/ScriptableObject/Excel/Pet/_PetUtil.asset.meta rename Assets/_Project/Scripts/Generator/Excel/{testExcel.cs => Hero.cs} (84%) create mode 100644 Assets/_Project/Scripts/Generator/Excel/Hero.cs.meta create mode 100644 Assets/_Project/Scripts/Generator/Excel/HeroUtil.cs create mode 100644 Assets/_Project/Scripts/Generator/Excel/HeroUtil.cs.meta create mode 100644 Assets/_Project/Scripts/Generator/Excel/Pet.cs create mode 100644 Assets/_Project/Scripts/Generator/Excel/Pet.cs.meta rename Assets/_Project/Scripts/Generator/Excel/{testExcelUtil.cs => PetUtil.cs} (83%) create mode 100644 Assets/_Project/Scripts/Generator/Excel/PetUtil.cs.meta delete mode 100644 Assets/_Project/Scripts/Generator/Excel/testExcel.cs.meta delete mode 100644 Assets/_Project/Scripts/Generator/Excel/testExcelUtil.cs.meta diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TExcel.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TExcel.cs new file mode 100644 index 0000000..4746576 --- /dev/null +++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TExcel.cs @@ -0,0 +1,31 @@ +using System; +using OfficeOpenXml; + +namespace Tools.ExcelResolver.Editor +{ + internal class TExcel : TType + { + public TExcel() { } + public TExcel(string typeText, Type classType) : base(typeText) + { + RealType = classType; + FieldWriteFormat = RealType.Name; + } + internal override Type RealType { get; } + internal override string FieldWriteFormat { get; } + internal override object DefaultValue => null; + + internal override bool String2TType(string typeText, out TType result) + { + result = null; + return false; + } + + internal override object TryParseFrom(string cellText) + { + var path = $"{ExcelResolverEditorWindow.Instance.excelResolverConfig.SOPathRoot}/{FieldWriteFormat}/{FieldWriteFormat}_{cellText}.asset"; + var so = UnityEditor.AssetDatabase.LoadAssetAtPath(path, RealType); + return so; + } + } +} \ No newline at end of file diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TExcel.cs.meta b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TExcel.cs.meta new file mode 100644 index 0000000..d9e34c9 --- /dev/null +++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TExcel.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7adf27c928ee4207b5e71ef2fafe6788 +timeCreated: 1739374254 \ No newline at end of file diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.TType.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.TType.cs index 990d558..e81412c 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.TType.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.TType.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using System.Reflection; using OfficeOpenXml; @@ -7,49 +8,64 @@ namespace Tools.ExcelResolver.Editor { internal static partial class ExcelResolverUtil { - private static TType[] _allTTypes; - private static Type[] _enumTypes; - private static Type[] _classAndStructTypes; + private static List _allTTypes; + private static List _enumTypes; + private static List _classAndStructTypes; + private static List _excelSODataTypes; + private static ExcelRange _currentCell; private static string _currentClassName; - internal static TType[] GetAllTTypes() - { - return Assembly.GetAssembly(typeof(TType)) - .GetTypes() - .Where(t => t.IsSubclassOf(typeof(TType)) && !t.IsAbstract) - .Select(t => Activator.CreateInstance(t) as TType) - .ToArray(); - } - - internal static Type[] GetAllEnumTypes() + private static bool _isInit; + + private static void Init() { - return AppDomain.CurrentDomain.GetAssemblies() - .Where(a => a.GetName().Name + if (_isInit) return; + _isInit = true; + _allTTypes = new List(); + _enumTypes = new List(); + _classAndStructTypes = new List(); + _excelSODataTypes = new List(); + + var tTypes = Assembly.GetAssembly(typeof(TType)).GetTypes(); // 直接获取TType所在的程序集Assembly-CSharp-Editor + foreach (var tType in tTypes) + { + if (tType.IsSubclassOf(typeof(TType)) && !tType.IsAbstract) + { + _allTTypes.Add(Activator.CreateInstance(tType) as TType); + } + } + + var types = AppDomain.CurrentDomain.GetAssemblies() + .First(a => a.GetName().Name // is "UnityEngine" is "Assembly-CSharp") // or "Assembly-CSharp-firstpass" // or "Assembly-CSharp-Editor" // or "Assembly-CSharp-Editor-firstpass") - .SelectMany(a => a.GetTypes()) - .Where(t => t.IsEnum && string.Equals(t.Namespace, "Tools.ExcelResolver", StringComparison.Ordinal)) - .ToArray(); - } - - internal static Type[] GetAllClassAndStruct() - { - return AppDomain.CurrentDomain.GetAssemblies() - .Where(a => a.GetName().Name - // is "UnityEngine" - is "Assembly-CSharp") - // or "Assembly-CSharp-firstpass" - // or "Assembly-CSharp-Editor" - // or "Assembly-CSharp-Editor-firstpass") - .SelectMany(a => a.GetTypes()) - .Where(t => (t.IsClass || (t.IsValueType && !t.IsPrimitive && !t.IsEnum)) // IsPrimitive为基本类型如float,int等 - && string.Equals(t.Namespace, "Tools.ExcelResolver", StringComparison.Ordinal) - && !typeof(IExcelSOUtil).IsAssignableFrom(t) && !typeof(IExcelSOData).IsAssignableFrom(t)) - .ToArray(); + .GetTypes().Where(t => string.Equals(t.Namespace, "Tools.ExcelResolver", StringComparison.Ordinal)); + foreach (var type in types) + { + if (type.IsEnum) + { + _enumTypes.Add(type); + } + else if (type.IsClass || (type.IsValueType && !type.IsPrimitive && !type.IsEnum)) // IsPrimitive为基本类型如float,int等 + { + if (typeof(IExcelSOData).IsAssignableFrom(type)) + { + _excelSODataTypes.Add(type); + } + else if (typeof(IExcelSOUtil).IsAssignableFrom(type)) + { + // do nothing + } + else + { + _classAndStructTypes.Add(type); + } + } + } } /// @@ -59,9 +75,10 @@ namespace Tools.ExcelResolver.Editor /// internal static TType GetTTypeByString(string targetText, ExcelRange cell = null, string className = null) { + Init(); _currentCell = cell ?? _currentCell; _currentClassName = className ?? _currentClassName; - _allTTypes ??= GetAllTTypes(); + targetText = targetText.Trim(); foreach (var tType in _allTTypes) @@ -72,7 +89,6 @@ namespace Tools.ExcelResolver.Editor } } - _enumTypes ??= GetAllEnumTypes(); foreach (var enumType in _enumTypes) { if (string.Equals(enumType.Name, targetText, StringComparison.OrdinalIgnoreCase)) @@ -81,7 +97,6 @@ namespace Tools.ExcelResolver.Editor } } - _classAndStructTypes ??= GetAllClassAndStruct(); foreach (var classAndStructType in _classAndStructTypes) { if (string.Equals(classAndStructType.Name, targetText, StringComparison.OrdinalIgnoreCase)) @@ -90,6 +105,14 @@ namespace Tools.ExcelResolver.Editor } } + foreach (var excelSODataType in _excelSODataTypes) + { + if (string.Equals(excelSODataType.Name, targetText, StringComparison.OrdinalIgnoreCase)) + { + return Activator.CreateInstance(typeof(TExcel), targetText, excelSODataType) as TType; + } + } + throw new Exception($"type定义错误 " + $"className: '{_currentClassName}' " + $"FullAddress: {_currentCell.FullAddress} " + diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs index 0293e24..78cfe8b 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs @@ -79,7 +79,7 @@ namespace Tools.ExcelResolver.Editor internal static void Dispose() { TypeCache.Clear(); - foreach (var allTType in _allTTypes ?? Array.Empty()) + foreach (var allTType in _allTTypes ?? Enumerable.Empty()) { allTType.Dispose(); } diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs index ef541ed..bbce36e 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs @@ -223,7 +223,7 @@ namespace Tools.ExcelResolver.Editor for (int col = 2; col <= worksheet.Dimension.End.Column; col++) { var varText = worksheet.Cells[2, col].Text; - if (string.IsNullOrEmpty(varText) || varText == "##") continue; + if (string.IsNullOrEmpty(varText) || worksheet.Cells[1, col].Text == "##") continue; FieldData fieldData = new FieldData { diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs index a378c1d..d5d647f 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs @@ -12,8 +12,8 @@ namespace Tools.ExcelResolver.Editor { public sealed partial class ExcelResolverEditorWindow : OdinEditorWindow { - [SerializeField] private ExcelResolverEditorConfig excelResolverConfig; - + internal static ExcelResolverEditorWindow Instance { get; private set; } + [SerializeField] internal ExcelResolverEditorConfig excelResolverConfig; [ShowInInspector] private Dictionary classCodeDataDict; @@ -27,6 +27,7 @@ namespace Tools.ExcelResolver.Editor protected override void Initialize() { + Instance = this; if (excelResolverConfig == null) { string[] assetGuids = AssetDatabase.FindAssets($"ExcelResolverEditorConfig t:ExcelResolverEditorConfig"); diff --git a/Assets/_Project/ExcelResolver/Excel/##hero.xlsx b/Assets/_Project/ExcelResolver/Excel/##hero.xlsx deleted file mode 100644 index 01bf040e78a30e2672d64da6cf62205a962dd091..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21159 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 Ute{p5u#ymFm<)9DKVJ|J0DB-y-~a#s diff --git a/Assets/_Project/ExcelResolver/Excel/testExcel.xlsx b/Assets/_Project/ExcelResolver/Excel/Hero.xlsx similarity index 54% rename from Assets/_Project/ExcelResolver/Excel/testExcel.xlsx rename to Assets/_Project/ExcelResolver/Excel/Hero.xlsx index 2cf3fa667c4daef5358628d6d9775c1c82bffa37..65e4b3c10e087e165a1cecd59f71eb5a9b5b9f4b 100644 GIT binary patch delta 3072 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 - /// 英雄 + /// 英雄id /// public int id; @@ -39,5 +39,10 @@ namespace Tools.ExcelResolver /// 头像 /// public Sprite icon; + + /// + /// 宠物 + /// + public Pet pet; } } diff --git a/Assets/_Project/Scripts/Generator/Excel/Hero.cs.meta b/Assets/_Project/Scripts/Generator/Excel/Hero.cs.meta new file mode 100644 index 0000000..ca12de9 --- /dev/null +++ b/Assets/_Project/Scripts/Generator/Excel/Hero.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 923ab6070481382408c6cae6284e8863 \ No newline at end of file diff --git a/Assets/_Project/Scripts/Generator/Excel/HeroUtil.cs b/Assets/_Project/Scripts/Generator/Excel/HeroUtil.cs new file mode 100644 index 0000000..a2b4b98 --- /dev/null +++ b/Assets/_Project/Scripts/Generator/Excel/HeroUtil.cs @@ -0,0 +1,25 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Tools.ExcelResolver +{ + using System; + using System.Collections; + using System.Collections.Generic; + using UnityEngine; + using Sirenix.OdinInspector; + + + public class HeroUtil : SerializedScriptableObject, IExcelSOUtil + { + + public Dictionary Data; + } +} diff --git a/Assets/_Project/Scripts/Generator/Excel/HeroUtil.cs.meta b/Assets/_Project/Scripts/Generator/Excel/HeroUtil.cs.meta new file mode 100644 index 0000000..4cce4d3 --- /dev/null +++ b/Assets/_Project/Scripts/Generator/Excel/HeroUtil.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 62b3c489e7d803047a1ecff490b69951 \ No newline at end of file diff --git a/Assets/_Project/Scripts/Generator/Excel/Pet.cs b/Assets/_Project/Scripts/Generator/Excel/Pet.cs new file mode 100644 index 0000000..16cec55 --- /dev/null +++ b/Assets/_Project/Scripts/Generator/Excel/Pet.cs @@ -0,0 +1,28 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Tools.ExcelResolver +{ + using System; + using System.Collections; + using System.Collections.Generic; + using UnityEngine; + using Sirenix.OdinInspector; + + + public class Pet : SerializedScriptableObject, IExcelSOData + { + + /// + /// 宠物id + /// + public int id; + } +} diff --git a/Assets/_Project/Scripts/Generator/Excel/Pet.cs.meta b/Assets/_Project/Scripts/Generator/Excel/Pet.cs.meta new file mode 100644 index 0000000..1b30666 --- /dev/null +++ b/Assets/_Project/Scripts/Generator/Excel/Pet.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 9022e9d3e95cff54faa7f22f0c316aee \ No newline at end of file diff --git a/Assets/_Project/Scripts/Generator/Excel/testExcelUtil.cs b/Assets/_Project/Scripts/Generator/Excel/PetUtil.cs similarity index 83% rename from Assets/_Project/Scripts/Generator/Excel/testExcelUtil.cs rename to Assets/_Project/Scripts/Generator/Excel/PetUtil.cs index 70716bd..db69d5b 100644 --- a/Assets/_Project/Scripts/Generator/Excel/testExcelUtil.cs +++ b/Assets/_Project/Scripts/Generator/Excel/PetUtil.cs @@ -17,9 +17,9 @@ namespace Tools.ExcelResolver using Sirenix.OdinInspector; - public class testExcelUtil : SerializedScriptableObject, IExcelSOUtil + public class PetUtil : SerializedScriptableObject, IExcelSOUtil { - public List Data; + public Dictionary Data; } } diff --git a/Assets/_Project/Scripts/Generator/Excel/PetUtil.cs.meta b/Assets/_Project/Scripts/Generator/Excel/PetUtil.cs.meta new file mode 100644 index 0000000..40abecd --- /dev/null +++ b/Assets/_Project/Scripts/Generator/Excel/PetUtil.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: dd0ef693880177f45a9004e73924b60a \ No newline at end of file diff --git a/Assets/_Project/Scripts/Generator/Excel/testExcel.cs.meta b/Assets/_Project/Scripts/Generator/Excel/testExcel.cs.meta deleted file mode 100644 index bbe96fe..0000000 --- a/Assets/_Project/Scripts/Generator/Excel/testExcel.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 83f98c6ff7089dc4ba08b80c69d1c01f \ No newline at end of file diff --git a/Assets/_Project/Scripts/Generator/Excel/testExcelUtil.cs.meta b/Assets/_Project/Scripts/Generator/Excel/testExcelUtil.cs.meta deleted file mode 100644 index 305ccfc..0000000 --- a/Assets/_Project/Scripts/Generator/Excel/testExcelUtil.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: dfb34a928a8a0354da1a8e018712548f \ No newline at end of file