Browse Source

TClassAndStruct导表成功

main
zhengchang 4 months ago
parent
commit
2715dcf495
  1. 14
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TClassAndStruct.cs
  2. 14
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs
  3. 2
      Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs
  4. 4
      Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs
  5. 4
      Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilSO.cs
  6. 0
      Assets/_Project/ExcelResolver/Excel/##com.xlsx
  7. 0
      Assets/_Project/ExcelResolver/Excel/##com.xlsx.meta
  8. 0
      Assets/_Project/ExcelResolver/Excel/##hero.xlsx
  9. 0
      Assets/_Project/ExcelResolver/Excel/##hero.xlsx.meta
  10. 0
      Assets/_Project/ExcelResolver/Excel/##monster.xlsx
  11. 0
      Assets/_Project/ExcelResolver/Excel/##monster.xlsx.meta
  12. 0
      Assets/_Project/ExcelResolver/Excel/##monster2.xlsx
  13. 0
      Assets/_Project/ExcelResolver/Excel/##monster2.xlsx.meta
  14. BIN
      Assets/_Project/ExcelResolver/Excel/testExcel.xlsx
  15. 0
      Assets/_Project/ExcelResolver/Excel/testExcel.xlsx.meta
  16. 71
      Assets/_Project/ScriptableObject/Excel/monster2/_monster2Util.asset
  17. 84
      Assets/_Project/ScriptableObject/Excel/monster2/monster2_1_1_1.asset
  18. 2
      Assets/_Project/ScriptableObject/Excel/testExcel.meta
  19. 25
      Assets/_Project/ScriptableObject/Excel/testExcel/_testExcelUtil.asset
  20. 2
      Assets/_Project/ScriptableObject/Excel/testExcel/_testExcelUtil.asset.meta
  21. 42
      Assets/_Project/ScriptableObject/Excel/testExcel/testExcel_6.asset
  22. 2
      Assets/_Project/ScriptableObject/Excel/testExcel/testExcel_6.asset.meta
  23. 93
      Assets/_Project/Scripts/Generator/Excel/monster2.cs
  24. 2
      Assets/_Project/Scripts/Generator/Excel/monster2.cs.meta
  25. 2
      Assets/_Project/Scripts/Generator/Excel/monster2Util.cs.meta
  26. 33
      Assets/_Project/Scripts/Generator/Excel/testExcel.cs
  27. 2
      Assets/_Project/Scripts/Generator/Excel/testExcel.cs.meta
  28. 4
      Assets/_Project/Scripts/Generator/Excel/testExcelUtil.cs
  29. 2
      Assets/_Project/Scripts/Generator/Excel/testExcelUtil.cs.meta

14
Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TClassAndStruct.cs

@ -21,7 +21,7 @@ namespace Tools.ExcelResolver.Editor
internal override object DefaultValue => null; internal override object DefaultValue => null;
internal override string FieldWriteFormat { get; } internal override string FieldWriteFormat { get; }
private TType[] tType; private readonly TType[] tType; // 初始化时创建可以减少运行时开销
internal override bool String2TType(string typeText, out TType result) internal override bool String2TType(string typeText, out TType result)
{ {
@ -34,10 +34,16 @@ namespace Tools.ExcelResolver.Editor
throw new NotImplementedException("请使用另一个重载方法"); throw new NotImplementedException("请使用另一个重载方法");
} }
internal object TryParseFrom(int row, int startCol, ExcelWorksheet worksheet) internal object TryParseFrom(int row, int col, ExcelWorksheet worksheet)
{ {
var obj = Activator.CreateInstance(RealType);
return null; var fields = RealType.GetFields();
for (int i = 0; i < fields.Length; i++)
{
var cellText = worksheet.Cells[row, col + i].Text;
fields[i].SetValue(obj, tType[i].TryParseFrom(cellText));
}
return obj;
} }
} }
} }

14
Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs

@ -55,24 +55,34 @@ namespace Tools.ExcelResolver.Editor
/// <summary> /// <summary>
/// 将TType转换为C#对象 /// 将TType转换为C#对象
/// </summary> /// </summary>
/// <param name="cell"></param> /// <param name="row"></param>
/// <param name="col"></param>
/// <param name="worksheet"></param>
/// <param name="type"></param> /// <param name="type"></param>
/// <param name="className"></param> /// <param name="className"></param>
/// <typeparam name="T"></typeparam> /// <typeparam name="T"></typeparam>
/// <returns></returns> /// <returns></returns>
/// <exception cref="Exception"></exception> /// <exception cref="Exception"></exception>
internal static object ConvertCellValue<T>(ExcelRange cell, T type, string className) internal static object ConvertCellValue<T>(int row, int col, ExcelWorksheet worksheet, T type, string className)
where T : TType where T : TType
{ {
object result; object result;
var cell = worksheet.Cells[row, col];
if (string.IsNullOrEmpty(cell?.Text)) // 如果单元格为空,则返回默认值 if (string.IsNullOrEmpty(cell?.Text)) // 如果单元格为空,则返回默认值
{ {
result = type.DefaultValue; result = type.DefaultValue;
} }
else else
{
if (type is TClassAndStruct classAndStruct)
{
result = classAndStruct.TryParseFrom(row, col, worksheet);
}
else
{ {
result = type.TryParseFrom(cell.Text.Trim()); result = type.TryParseFrom(cell.Text.Trim());
} }
}
if (result != null) if (result != null)
{ {

2
Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs

@ -22,7 +22,7 @@ namespace Tools.ExcelResolver.Editor
// 获取Excel文件 // 获取Excel文件
excelResolverConfig.MakeSureDirectory(); excelResolverConfig.MakeSureDirectory();
var removeFiles = new DirectoryInfo(excelResolverConfig.SOPathRoot).GetDirectories(); var removeFiles = new DirectoryInfo(excelResolverConfig.SOPathRoot).GetDirectories();
var excelFiles = new DirectoryInfo(excelResolverConfig.ExcelPathRoot).GetFiles("*.xlsx").Where(f => !f.Name.StartsWith("~$") && !f.Name.StartsWith("_")); var excelFiles = new DirectoryInfo(excelResolverConfig.ExcelPathRoot).GetFiles("*.xlsx").Where(f => !f.Name.StartsWith("~$") && !f.Name.StartsWith("##"));
removeFiles = removeFiles.Where(f => excelFiles.All(ef => ef.Name[..^5] != f.Name)).ToArray(); removeFiles = removeFiles.Where(f => excelFiles.All(ef => ef.Name[..^5] != f.Name)).ToArray();
foreach (var removeFile in removeFiles) foreach (var removeFile in removeFiles)

4
Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs

@ -90,9 +90,7 @@ namespace Tools.ExcelResolver.Editor
{ {
var col = pair.Key; var col = pair.Key;
var fieldData = pair.Value; var fieldData = pair.Value;
object convertedValue = ExcelResolverUtil.ConvertCellValue(row, col, worksheet, fieldData.type, classCodeData.className);
var cell = worksheet.Cells[row, col];
object convertedValue = ExcelResolverUtil.ConvertCellValue(cell, fieldData.type, classCodeData.className);
FieldInfo fieldInfo = instance.GetType().GetField(fieldData.varName); FieldInfo fieldInfo = instance.GetType().GetField(fieldData.varName);
if (fieldInfo == null) throw new Exception($"{classCodeData.className}中不存在字段:{fieldData.varName}"); if (fieldInfo == null) throw new Exception($"{classCodeData.className}中不存在字段:{fieldData.varName}");
fieldInfo.SetValue(instance, convertedValue); fieldInfo.SetValue(instance, convertedValue);

4
Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilSO.cs

@ -208,9 +208,7 @@ namespace Tools.ExcelResolver.Editor
var row = pair.Key; var row = pair.Key;
var fieldData = pair.Value; var fieldData = pair.Value;
var cell = worksheet.Cells[row, 3]; object convertedValue = ExcelResolverUtil.ConvertCellValue(row, 3, worksheet, fieldData.type, classCodeData.className);
object convertedValue =
ExcelResolverUtil.ConvertCellValue(cell, fieldData.type, classCodeData.className);
FieldInfo fieldInfo = instance.GetType().GetField(fieldData.varName); FieldInfo fieldInfo = instance.GetType().GetField(fieldData.varName);
if (fieldInfo == null) throw new Exception($"{classCodeData.className}中不存在字段:{fieldData.varName}"); if (fieldInfo == null) throw new Exception($"{classCodeData.className}中不存在字段:{fieldData.varName}");
fieldInfo.SetValue(instance, convertedValue); fieldInfo.SetValue(instance, convertedValue);

0
Assets/_Project/ExcelResolver/Excel/_com.xlsx → Assets/_Project/ExcelResolver/Excel/##com.xlsx

0
Assets/_Project/ExcelResolver/Excel/_com.xlsx.meta → Assets/_Project/ExcelResolver/Excel/##com.xlsx.meta

0
Assets/_Project/ExcelResolver/Excel/_hero.xlsx → Assets/_Project/ExcelResolver/Excel/##hero.xlsx

0
Assets/_Project/ExcelResolver/Excel/_hero.xlsx.meta → Assets/_Project/ExcelResolver/Excel/##hero.xlsx.meta

0
Assets/_Project/ExcelResolver/Excel/_monster.xlsx → Assets/_Project/ExcelResolver/Excel/##monster.xlsx

0
Assets/_Project/ExcelResolver/Excel/_monster.xlsx.meta → Assets/_Project/ExcelResolver/Excel/##monster.xlsx.meta

0
Assets/_Project/ExcelResolver/Excel/monster2.xlsx → Assets/_Project/ExcelResolver/Excel/##monster2.xlsx

0
Assets/_Project/ExcelResolver/Excel/monster2.xlsx.meta → Assets/_Project/ExcelResolver/Excel/##monster2.xlsx.meta

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

Binary file not shown.

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

71
Assets/_Project/ScriptableObject/Excel/monster2/_monster2Util.asset

@ -1,71 +0,0 @@
%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: dccd381378a062b499ddc03703bfa842, type: 3}
m_Name: _monster2Util
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects:
- {fileID: 11400000, guid: 4a8c4100d6943fa4a9dff3024cf251e4, type: 2}
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes:
- Name: Data
Entry: 7
Data: 0|System.Collections.Generic.Dictionary`2[[System.ValueTuple`3[[System.Int32,
mscorlib],[System.Int32, mscorlib],[System.Int32, mscorlib]], mscorlib],[Tools.ExcelResolver.monster2,
Assembly-CSharp]], mscorlib
- Name: comparer
Entry: 7
Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.ValueTuple`3[[System.Int32,
mscorlib],[System.Int32, mscorlib],[System.Int32, mscorlib]], mscorlib]],
mscorlib
- Name:
Entry: 8
Data:
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data:
- Name: $k
Entry: 7
Data: System.ValueTuple`3[[System.Int32, mscorlib],[System.Int32, mscorlib],[System.Int32,
mscorlib]], mscorlib
- Name: Item1
Entry: 3
Data: 1
- Name: Item2
Entry: 3
Data: 1
- Name: Item3
Entry: 3
Data: 1
- Name:
Entry: 8
Data:
- Name: $v
Entry: 10
Data: 0
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:

84
Assets/_Project/ScriptableObject/Excel/monster2/monster2_1_1_1.asset

@ -1,84 +0,0 @@
%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: 16a0885aa5ee33046af22575907b7409, type: 3}
m_Name: monster2_1_1_1
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects: []
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes:
- Name: nihao
Entry: 7
Data: 0|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.Single,
mscorlib]], mscorlib
- Name: comparer
Entry: 7
Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
mscorlib]], mscorlib
- Name:
Entry: 8
Data:
- Name:
Entry: 12
Data: 2
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 2
- Name: $v
Entry: 4
Data: 2.3
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 3
Data: 5
- Name: $v
Entry: 4
Data: 4.6
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
id: 1
level: 1
star: 1
name: "\u9053\u58EB"
icon: hero_1
has: 1
hp: 100
atk: 20
speed: 1.2
pos: {x: 0, y: 1, z: 9}
ches: {x: 0, y: 1}
attack_target:
- {x: 1, y: 2}
- {x: 1, y: 2}
- {x: 1, y: 2}
- {x: 1, y: 2}
color: 3

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

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

25
Assets/_Project/ScriptableObject/Excel/testExcel/_testExcelUtil.asset

@ -0,0 +1,25 @@
%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: dfb34a928a8a0354da1a8e018712548f, type: 3}
m_Name: _testExcelUtil
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects: []
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes: []
Data:
- {fileID: 11400000, guid: 3bbf9021da858e346ad465fac30a4fcf, type: 2}

2
Assets/_Project/ScriptableObject/Excel/monster2/monster2_1_1_1.asset.meta → Assets/_Project/ScriptableObject/Excel/testExcel/_testExcelUtil.asset.meta

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

42
Assets/_Project/ScriptableObject/Excel/testExcel/testExcel_6.asset

@ -0,0 +1,42 @@
%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: 83f98c6ff7089dc4ba08b80c69d1c01f, type: 3}
m_Name: testExcel_6
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects: []
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes:
- Name: item
Entry: 7
Data: 0|Tools.ExcelResolver.Item, Assembly-CSharp
- Name: id
Entry: 3
Data: 1001
- Name: refId
Entry: 3
Data: 1
- Name: name
Entry: 1
Data: hero_image_1
- Name: price
Entry: 3
Data: 9999
- Name:
Entry: 8
Data:
id: 1

2
Assets/_Project/ScriptableObject/Excel/monster2/_monster2Util.asset.meta → Assets/_Project/ScriptableObject/Excel/testExcel/testExcel_6.asset.meta

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

93
Assets/_Project/Scripts/Generator/Excel/monster2.cs

@ -1,93 +0,0 @@
//------------------------------------------------------------------------------
// <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 monster2 : SerializedScriptableObject, IExcelSOData
{
/// <summary>
/// 英雄
/// </summary>
public int id;
/// <summary>
/// 等级
/// </summary>
public int level;
/// <summary>
/// 星级
/// </summary>
public int star;
/// <summary>
/// 名称
/// </summary>
public string name;
/// <summary>
/// icon
/// </summary>
public string icon;
/// <summary>
/// 有宠物
/// </summary>
public bool has;
/// <summary>
/// 血量
/// </summary>
public int hp;
/// <summary>
/// 攻击力
/// </summary>
public int atk;
/// <summary>
/// 移速
/// </summary>
public float speed;
/// <summary>
/// 位置
/// </summary>
public Vector3 pos;
/// <summary>
/// 位置
/// </summary>
public Vector2 ches;
/// <summary>
/// 攻击优先级
/// </summary>
public List<Vector2> attack_target;
/// <summary>
/// 你好
/// </summary>
public Dictionary<Int32, Single> nihao;
/// <summary>
///
/// </summary>
public CustomizeColor color;
}
}

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

@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 16a0885aa5ee33046af22575907b7409

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

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

33
Assets/_Project/Scripts/Generator/Excel/testExcel.cs

@ -0,0 +1,33 @@
//------------------------------------------------------------------------------
// <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 testExcel : SerializedScriptableObject, IExcelSOData
{
/// <summary>
/// 英雄
/// </summary>
public int id;
/// <summary>
///
/// </summary>
public Item item;
}
}

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

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

4
Assets/_Project/Scripts/Generator/Excel/monster2Util.cs → Assets/_Project/Scripts/Generator/Excel/testExcelUtil.cs

@ -17,9 +17,9 @@ namespace Tools.ExcelResolver
using Sirenix.OdinInspector; using Sirenix.OdinInspector;
public class monster2Util : SerializedScriptableObject, IExcelSOUtil public class testExcelUtil : SerializedScriptableObject, IExcelSOUtil
{ {
public Dictionary<(System.Int32, System.Int32, System.Int32), monster2> Data; public List<testExcel> Data;
} }
} }

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

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