Browse Source

TExcel

main
coffee 4 months ago
parent
commit
20fbaa4fa8
  1. 31
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TExcel.cs
  2. 3
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TExcel.cs.meta
  3. 95
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.TType.cs
  4. 2
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs
  5. 2
      Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs
  6. 5
      Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs
  7. BIN
      Assets/_Project/ExcelResolver/Excel/##hero.xlsx
  8. BIN
      Assets/_Project/ExcelResolver/Excel/Hero.xlsx
  9. 0
      Assets/_Project/ExcelResolver/Excel/Hero.xlsx.meta
  10. BIN
      Assets/_Project/ExcelResolver/Excel/Pet.xlsx
  11. 2
      Assets/_Project/ExcelResolver/Excel/Pet.xlsx.meta
  12. 2
      Assets/_Project/ScriptableObject/Excel/Hero.meta
  13. 5
      Assets/_Project/ScriptableObject/Excel/Hero/Hero_1.asset
  14. 2
      Assets/_Project/ScriptableObject/Excel/Hero/Hero_1.asset.meta
  15. 56
      Assets/_Project/ScriptableObject/Excel/Hero/_HeroUtil.asset
  16. 2
      Assets/_Project/ScriptableObject/Excel/Hero/_HeroUtil.asset.meta
  17. 8
      Assets/_Project/ScriptableObject/Excel/Pet.meta
  18. 7
      Assets/_Project/ScriptableObject/Excel/Pet/Pet_1.asset
  19. 8
      Assets/_Project/ScriptableObject/Excel/Pet/Pet_1.asset.meta
  20. 56
      Assets/_Project/ScriptableObject/Excel/Pet/_PetUtil.asset
  21. 8
      Assets/_Project/ScriptableObject/Excel/Pet/_PetUtil.asset.meta
  22. 9
      Assets/_Project/Scripts/Generator/Excel/Hero.cs
  23. 2
      Assets/_Project/Scripts/Generator/Excel/Hero.cs.meta
  24. 25
      Assets/_Project/Scripts/Generator/Excel/HeroUtil.cs
  25. 2
      Assets/_Project/Scripts/Generator/Excel/HeroUtil.cs.meta
  26. 28
      Assets/_Project/Scripts/Generator/Excel/Pet.cs
  27. 2
      Assets/_Project/Scripts/Generator/Excel/Pet.cs.meta
  28. 4
      Assets/_Project/Scripts/Generator/Excel/PetUtil.cs
  29. 2
      Assets/_Project/Scripts/Generator/Excel/PetUtil.cs.meta
  30. 2
      Assets/_Project/Scripts/Generator/Excel/testExcel.cs.meta
  31. 2
      Assets/_Project/Scripts/Generator/Excel/testExcelUtil.cs.meta

31
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;
}
}
}

3
Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TExcel.cs.meta

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 7adf27c928ee4207b5e71ef2fafe6788
timeCreated: 1739374254

95
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<TType> _allTTypes;
private static List<Type> _enumTypes;
private static List<Type> _classAndStructTypes;
private static List<Type> _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();
}
private static bool _isInit;
internal static Type[] GetAllEnumTypes()
private static void Init()
{
return AppDomain.CurrentDomain.GetAssemblies()
.Where(a => a.GetName().Name
if (_isInit) return;
_isInit = true;
_allTTypes = new List<TType>();
_enumTypes = new List<Type>();
_classAndStructTypes = new List<Type>();
_excelSODataTypes = new List<Type>();
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);
}
}
}
}
/// <summary>
@ -59,9 +75,10 @@ namespace Tools.ExcelResolver.Editor
/// <returns></returns>
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: '<color=cyan>{_currentClassName}</color>' " +
$"FullAddress: <color=cyan>{_currentCell.FullAddress}</color> " +

2
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<TType>())
foreach (var allTType in _allTTypes ?? Enumerable.Empty<TType>())
{
allTType.Dispose();
}

2
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
{

5
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<ExcelWorksheet, ClassCodeData> 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");

BIN
Assets/_Project/ExcelResolver/Excel/##hero.xlsx

Binary file not shown.

BIN
Assets/_Project/ExcelResolver/Excel/testExcel.xlsx → Assets/_Project/ExcelResolver/Excel/Hero.xlsx

Binary file not shown.

0
Assets/_Project/ExcelResolver/Excel/testExcel.xlsx.meta → Assets/_Project/ExcelResolver/Excel/Hero.xlsx.meta

BIN
Assets/_Project/ExcelResolver/Excel/Pet.xlsx

Binary file not shown.

2
Assets/_Project/ExcelResolver/Excel/##hero.xlsx.meta → Assets/_Project/ExcelResolver/Excel/Pet.xlsx.meta

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: d158d305a64ac74428b71f7a8f6ae16c
guid: c34cba1a45d61ab4ebe6c0dffbd44be3
DefaultImporter:
externalObjects: {}
userData:

2
Assets/_Project/ScriptableObject/Excel/testExcel.meta → Assets/_Project/ScriptableObject/Excel/Hero.meta

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e5c0e3f65d74bde49a58ac6713bd2d2c
guid: 1efddd263be56e042862c0687b477f7d
folderAsset: yes
DefaultImporter:
externalObjects: {}

5
Assets/_Project/ScriptableObject/Excel/testExcel/testExcel_6.asset → Assets/_Project/ScriptableObject/Excel/Hero/Hero_1.asset

@ -9,8 +9,8 @@ MonoBehaviour:
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 83f98c6ff7089dc4ba08b80c69d1c01f, type: 3}
m_Name: testExcel_6
m_Script: {fileID: 11500000, guid: 923ab6070481382408c6cae6284e8863, type: 3}
m_Name: Hero_1
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 2
@ -44,3 +44,4 @@ MonoBehaviour:
- {x: 1001, y: 1002, z: 1003}
- {x: 1002, y: 1003, z: 1002}
icon: {fileID: 21300000, guid: bb675bdf01f86df4e833cfee142a8914, type: 3}
pet: {fileID: 11400000, guid: e467b358cf9ecf54f9b2590d0e514d84, type: 2}

2
Assets/_Project/ScriptableObject/Excel/testExcel/_testExcelUtil.asset.meta → Assets/_Project/ScriptableObject/Excel/Hero/Hero_1.asset.meta

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 7eaf28151ff5fcd4a87ffbd6994825a0
guid: 95d14bae9d1fbb0498fbe9baf74a1d09
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000

56
Assets/_Project/ScriptableObject/Excel/Hero/_HeroUtil.asset

@ -0,0 +1,56 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 62b3c489e7d803047a1ecff490b69951, type: 3}
m_Name: _HeroUtil
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects:
- {fileID: 11400000, guid: 95d14bae9d1fbb0498fbe9baf74a1d09, type: 2}
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes:
- Name: Data
Entry: 7
Data: 0|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[Tools.ExcelResolver.Hero,
Assembly-CSharp]], mscorlib
- Name: comparer
Entry: 7
Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
mscorlib]], mscorlib
- Name:
Entry: 8
Data:
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 1
- Name: $v
Entry: 10
Data: 0
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:

2
Assets/_Project/ScriptableObject/Excel/testExcel/testExcel_6.asset.meta → Assets/_Project/ScriptableObject/Excel/Hero/_HeroUtil.asset.meta

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 3bbf9021da858e346ad465fac30a4fcf
guid: f690e8a9ed7a6ba4b820723f62dd9dca
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000

8
Assets/_Project/ScriptableObject/Excel/Pet.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 9d73100d55f4eea4caa64830a497134f
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

7
Assets/_Project/ScriptableObject/Excel/testExcel/_testExcelUtil.asset → Assets/_Project/ScriptableObject/Excel/Pet/Pet_1.asset

@ -9,8 +9,8 @@ MonoBehaviour:
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dfb34a928a8a0354da1a8e018712548f, type: 3}
m_Name: _testExcelUtil
m_Script: {fileID: 11500000, guid: 9022e9d3e95cff54faa7f22f0c316aee, type: 3}
m_Name: Pet_1
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 2
@ -21,5 +21,4 @@ MonoBehaviour:
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes: []
Data:
- {fileID: 11400000, guid: 3bbf9021da858e346ad465fac30a4fcf, type: 2}
id: 1

8
Assets/_Project/ScriptableObject/Excel/Pet/Pet_1.asset.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e467b358cf9ecf54f9b2590d0e514d84
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

56
Assets/_Project/ScriptableObject/Excel/Pet/_PetUtil.asset

@ -0,0 +1,56 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dd0ef693880177f45a9004e73924b60a, type: 3}
m_Name: _PetUtil
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects:
- {fileID: 11400000, guid: e467b358cf9ecf54f9b2590d0e514d84, type: 2}
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes:
- Name: Data
Entry: 7
Data: 0|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[Tools.ExcelResolver.Pet,
Assembly-CSharp]], mscorlib
- Name: comparer
Entry: 7
Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
mscorlib]], mscorlib
- Name:
Entry: 8
Data:
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 1
- Name: $v
Entry: 10
Data: 0
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:

8
Assets/_Project/ScriptableObject/Excel/Pet/_PetUtil.asset.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e3a29f1b76728d64aaefb7c9c4e69390
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

9
Assets/_Project/Scripts/Generator/Excel/testExcel.cs → Assets/_Project/Scripts/Generator/Excel/Hero.cs

@ -17,11 +17,11 @@ namespace Tools.ExcelResolver
using Sirenix.OdinInspector;
public class testExcel : SerializedScriptableObject, IExcelSOData
public class Hero : SerializedScriptableObject, IExcelSOData
{
/// <summary>
/// 英雄
/// 英雄id
/// </summary>
public int id;
@ -39,5 +39,10 @@ namespace Tools.ExcelResolver
/// 头像
/// </summary>
public Sprite icon;
/// <summary>
/// 宠物
/// </summary>
public Pet pet;
}
}

2
Assets/_Project/Scripts/Generator/Excel/Hero.cs.meta

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 923ab6070481382408c6cae6284e8863

25
Assets/_Project/Scripts/Generator/Excel/HeroUtil.cs

@ -0,0 +1,25 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 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.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Tools.ExcelResolver
{
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Sirenix.OdinInspector;
public class HeroUtil : SerializedScriptableObject, IExcelSOUtil
{
public Dictionary<System.Int32, Hero> Data;
}
}

2
Assets/_Project/Scripts/Generator/Excel/HeroUtil.cs.meta

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 62b3c489e7d803047a1ecff490b69951

28
Assets/_Project/Scripts/Generator/Excel/Pet.cs

@ -0,0 +1,28 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 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.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Tools.ExcelResolver
{
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Sirenix.OdinInspector;
public class Pet : SerializedScriptableObject, IExcelSOData
{
/// <summary>
/// 宠物id
/// </summary>
public int id;
}
}

2
Assets/_Project/Scripts/Generator/Excel/Pet.cs.meta

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 9022e9d3e95cff54faa7f22f0c316aee

4
Assets/_Project/Scripts/Generator/Excel/testExcelUtil.cs → 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<testExcel> Data;
public Dictionary<System.Int32, Pet> Data;
}
}

2
Assets/_Project/Scripts/Generator/Excel/PetUtil.cs.meta

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: dd0ef693880177f45a9004e73924b60a

2
Assets/_Project/Scripts/Generator/Excel/testExcel.cs.meta

@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 83f98c6ff7089dc4ba08b80c69d1c01f

2
Assets/_Project/Scripts/Generator/Excel/testExcelUtil.cs.meta

@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: dfb34a928a8a0354da1a8e018712548f
Loading…
Cancel
Save