Browse Source

转换

master
coffee 6 months ago
parent
commit
2b102a678d
  1. 3
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core.meta
  2. 0
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data.meta
  3. 0
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data/ClassCodeData.cs
  4. 0
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data/ClassCodeData.cs.meta
  5. 4
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data/FieldData.cs
  6. 0
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data/FieldData.cs.meta
  7. 0
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data/TableType.cs
  8. 0
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data/TableType.cs.meta
  9. 3
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/DataVisitors.meta
  10. 7
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/DataVisitors/ExcelStreamDataCreator.cs
  11. 3
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/DataVisitors/ExcelStreamDataCreator.cs.meta
  12. 3
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types.meta
  13. 22
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TBool.cs
  14. 3
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TBool.cs.meta
  15. 22
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TFloat.cs
  16. 3
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TFloat.cs.meta
  17. 18
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TInt.cs
  18. 3
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TInt.cs.meta
  19. 17
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TString.cs
  20. 3
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TString.cs.meta
  21. 13
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TType.cs
  22. 3
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TType.cs.meta
  23. 10
      Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs
  24. 2
      Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs
  25. 22
      Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOData.cs
  26. 2
      Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.cs
  27. 15
      Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverUtil.Cell.cs
  28. 33
      Assets/Unity-Tools/Core/Util/TypeUtil.cs

3
Assets/Unity-Tools/Core/ExcelResolver/Editor/Core.meta

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 074eed021c3f4ca6abafc0acf2b85a81
timeCreated: 1736085541

0
Assets/Unity-Tools/Core/ExcelResolver/Editor/Data.meta → Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data.meta

0
Assets/Unity-Tools/Core/ExcelResolver/Editor/Data/ClassCodeData.cs → Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data/ClassCodeData.cs

0
Assets/Unity-Tools/Core/ExcelResolver/Editor/Data/ClassCodeData.cs.meta → Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data/ClassCodeData.cs.meta

4
Assets/Unity-Tools/Core/ExcelResolver/Editor/Data/FieldData.cs → Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data/FieldData.cs

@ -10,7 +10,7 @@ namespace Tools.ExcelResolver.Editor
public string varName; public string varName;
public string typeString; public string typeString;
public Type type; public TType type;
public string info; public string info;
public string description; public string description;
public string path; public string path;
@ -33,7 +33,7 @@ namespace Tools.ExcelResolver.Editor
{ {
Attributes = MemberAttributes.Public, Attributes = MemberAttributes.Public,
Name = field.varName, Name = field.varName,
Type = new CodeTypeReference(field.type), Type = new CodeTypeReference(field.type.RealType),
CustomAttributes = new CodeAttributeDeclarationCollection() CustomAttributes = new CodeAttributeDeclarationCollection()
{ {
new CodeAttributeDeclaration("SerializeField") new CodeAttributeDeclaration("SerializeField")

0
Assets/Unity-Tools/Core/ExcelResolver/Editor/Data/FieldData.cs.meta → Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data/FieldData.cs.meta

0
Assets/Unity-Tools/Core/ExcelResolver/Editor/Data/TableType.cs → Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data/TableType.cs

0
Assets/Unity-Tools/Core/ExcelResolver/Editor/Data/TableType.cs.meta → Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data/TableType.cs.meta

3
Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/DataVisitors.meta

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e2fd51fb4a2e4c9295c832372c69badb
timeCreated: 1736086194

7
Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/DataVisitors/ExcelStreamDataCreator.cs

@ -0,0 +1,7 @@
namespace Tools.ExcelResolver.Editor.Core.DataVisitors
{
public class ExcelStreamDataCreator
{
}
}

3
Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/DataVisitors/ExcelStreamDataCreator.cs.meta

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: a4c1ffa2921644ac84e4b21f34f77766
timeCreated: 1736086204

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

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 844ba2c958ce4573b3978cbac07358fa
timeCreated: 1736085556

22
Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TBool.cs

@ -0,0 +1,22 @@
using System;
namespace Tools.ExcelResolver.Editor
{
public class TBool : TType
{
public override string TypeName => "bool";
public override Type RealType => typeof(bool);
public override bool TryParseFrom(string s, out object o)
{
if (bool.TryParse(s, out var b))
{
o = b;
return true;
}
o = null;
return false;
}
}
}

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

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 92b5580e41c043c2aeb43c9221a049db
timeCreated: 1736086791

22
Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TFloat.cs

@ -0,0 +1,22 @@
using System;
namespace Tools.ExcelResolver.Editor
{
public class TFloat : TType
{
public override string TypeName => "float";
public override Type RealType => typeof(float);
public override bool TryParseFrom(string s, out object o)
{
if (float.TryParse(s, out float f))
{
o = f;
return true;
}
o = null;
return false;
}
}
}

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

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e4714110328f46fa975f1902a0f00c35
timeCreated: 1736086750

18
Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TInt.cs

@ -0,0 +1,18 @@
using System;
namespace Tools.ExcelResolver.Editor
{
public class TInt : TType
{
public override string TypeName => "int";
public override Type RealType => typeof(int);
public override bool TryParseFrom(string s, out object o)
{
var b = int.TryParse(s, out var i);
o = i;
return b;
}
}
}

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

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 3d33275bda624ab0b31156910aa23891
timeCreated: 1736085651

17
Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TString.cs

@ -0,0 +1,17 @@
using System;
namespace Tools.ExcelResolver.Editor
{
public class TString : TType
{
public override string TypeName => "string";
public override Type RealType => typeof(string);
public override bool TryParseFrom(string s, out object o)
{
o = s;
return true;
}
}
}

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

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: fba001041d5043989d675568a184fe9d
timeCreated: 1736086717

13
Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TType.cs

@ -0,0 +1,13 @@
using System;
namespace Tools.ExcelResolver.Editor
{
public abstract class TType
{
public abstract string TypeName { get; }
public abstract Type RealType { get; }
public abstract bool TryParseFrom(string s, out object o);
}
}

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

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 06b8bf65d01947f5811f39a18abf478c
timeCreated: 1736085568

10
Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs

@ -13,10 +13,11 @@ namespace Tools.ExcelResolver.Editor
{ {
private void ReadExcel() private void ReadExcel()
{ {
classCodeDataDict = new Dictionary<ExcelWorksheet, ClassCodeData>();
// 获取Excel文件 // 获取Excel文件
excelResolverConfig.MakeSureDirectory(); excelResolverConfig.MakeSureDirectory();
var excelFiles = new DirectoryInfo(excelResolverConfig.ExcelPathRoot).GetFiles("*.xlsx") var excelFiles = new DirectoryInfo(excelResolverConfig.ExcelPathRoot).GetFiles("*.xlsx").Where(f => !f.Name.StartsWith("~$"));
.Where(f => !f.Name.StartsWith("~$"));
foreach (var excelFile in excelFiles) foreach (var excelFile in excelFiles)
{ {
using FileStream stream = File.Open(excelFile.FullName, FileMode.Open, FileAccess.Read, using FileStream stream = File.Open(excelFile.FullName, FileMode.Open, FileAccess.Read,
@ -36,6 +37,7 @@ namespace Tools.ExcelResolver.Editor
WriteDataCode(classCodeData); WriteDataCode(classCodeData);
WriteSOCode(classCodeData); WriteSOCode(classCodeData);
classCodeDataDict.Add(worksheet, classCodeData);
// WriteSOData(worksheet, classCodeData); // WriteSOData(worksheet, classCodeData);
} }
AssetDatabase.Refresh(); AssetDatabase.Refresh();
@ -128,12 +130,14 @@ namespace Tools.ExcelResolver.Editor
for (int col = 2; col <= endColumn; col++) for (int col = 2; col <= endColumn; col++)
{ {
if (string.IsNullOrEmpty(worksheet.Cells[2, col].Text)) continue;
FieldData fieldData = new FieldData FieldData fieldData = new FieldData
{ {
colIndex = col, colIndex = col,
varName = worksheet.Cells[2, col].Text, varName = worksheet.Cells[2, col].Text,
typeString = worksheet.Cells[3, col].Text, typeString = worksheet.Cells[3, col].Text,
type = TypeUtil.GetTypeByString(worksheet.Cells[3, col].Text), type = TypeUtil.GetTTypeByString(worksheet.Cells[3, col].Text),
info = worksheet.Cells[4, col].Text, info = worksheet.Cells[4, col].Text,
description = worksheet.Cells[5, col].Text, description = worksheet.Cells[5, col].Text,
path = worksheet.Cells[6, col].Text, path = worksheet.Cells[6, col].Text,

2
Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs

@ -66,7 +66,7 @@ namespace Tools.ExcelResolver.Editor
{ {
Attributes = MemberAttributes.Public, Attributes = MemberAttributes.Public,
Name = field.varName, Name = field.varName,
Type = new CodeTypeReference(field.type), Type = new CodeTypeReference(field.type.RealType),
Comments = Comments =
{ {
new CodeCommentStatement("<summary>", true), new CodeCommentStatement("<summary>", true),

22
Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOData.cs

@ -1,15 +1,22 @@
using System; using System;
using System.IO; using System.Collections.Generic;
using System.Linq;
using OfficeOpenXml; using OfficeOpenXml;
using UnityEditor;
using UnityEngine; using UnityEngine;
namespace Tools.ExcelResolver.Editor namespace Tools.ExcelResolver.Editor
{ {
public sealed partial class ExcelResolverEditorWindow public sealed partial class ExcelResolverEditorWindow
{ {
private void WriteSOData(ExcelWorksheet worksheet, ClassCodeData classCodeData) private Dictionary<ExcelWorksheet, ClassCodeData> classCodeDataDict;
private void WriteSOData()
{
foreach (var data in classCodeDataDict)
{ {
var worksheet = data.Key;
var classCodeData = data.Value;
Type soType = ExcelResolverUtil.GetOrCacheTypeByName(classCodeData.className); Type soType = ExcelResolverUtil.GetOrCacheTypeByName(classCodeData.className);
if (soType == null) if (soType == null)
@ -32,17 +39,20 @@ namespace Tools.ExcelResolver.Editor
// AssetDatabase.SaveAssets(); // AssetDatabase.SaveAssets();
// } // }
for (int row = 7; row < worksheet.Dimension.End.Row; row++) for (int row = 7; row <= worksheet.Dimension.End.Row; row++)
{ {
// 跳过注释行 // 跳过注释行
if (worksheet.Cells[row, 1].Text == "##") continue; if (worksheet.Cells[row, 1].Text == "##") continue;
ScriptableObject instance = ScriptableObject.CreateInstance(soType); ScriptableObject instance = ScriptableObject.CreateInstance(soType);
for (int col = 2; col < worksheet.Dimension.End.Column; col++) for (int col = 2; col < classCodeData.fields.Keys.Max(); col++)
{ {
var cell = worksheet.Cells[row, col]; var cell = worksheet.Cells[row, col];
// object convertedValue = ExcelResolverUtil.ConvertCellValue(cell, classCodeData.fields[col], classCodeData.fieldNames[col - 2], classCodeData.className); if (string.IsNullOrEmpty(cell.Text)) continue;
object convertedValue = ExcelResolverUtil.ConvertCellValue(cell, classCodeData.fields[col].type, classCodeData.className);
}
} }
} }
} }

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

@ -41,6 +41,6 @@ namespace Tools.ExcelResolver.Editor
private void GenerateCode() => ReadExcel(); private void GenerateCode() => ReadExcel();
[Button(ButtonSizes.Gigantic), HorizontalGroup("Split", 0.5f)] [Button(ButtonSizes.Gigantic), HorizontalGroup("Split", 0.5f)]
private void GenerateSO() => ReadExcel(); private void GenerateSO() => WriteSOData();
} }
} }

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

@ -37,11 +37,16 @@ namespace Tools.ExcelResolver.Editor
return values; return values;
} }
// internal static object ConvertCellValue<T>(ExcelRange cell, T type, string header, string className) internal static object ConvertCellValue<T>(ExcelRange cell, T type, string className)
// { where T : TType
// string cellValue = cell.Text.Trim(); {
// if (type.TryParseFrom(cell.Text, out var value))
// } {
return value;
}
throw new Exception($"单元格转换失败 FullAddress:'{cell.FullAddress}' Text:'{cell.Text}' className:'{className}'");
}
/// <summary> /// <summary>
/// 通用的单元格 -> C# 对象转换 /// 通用的单元格 -> C# 对象转换

33
Assets/Unity-Tools/Core/Util/TypeUtil.cs

@ -1,11 +1,44 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Tools.ExcelResolver.Editor;
using UnityEngine; using UnityEngine;
namespace Tools namespace Tools
{ {
public static class TypeUtil public static class TypeUtil
{ {
public static TType GetTTypeByString(string typeText)
{
return typeText switch
{
"int" => new TInt(),
"float" => new TFloat(),
"string" => new TString(),
"bool" => new TBool(),
// "Vector2" => typeof(Vector2),
// "Vector3" => typeof(Vector3),
//
// "List<int>" => typeof(List<int>),
// "List<float>" => typeof(List<float>),
// "List<string>" => typeof(List<string>),
// "List<bool>" => typeof(List<bool>),
// "List<Vector2>" => typeof(List<Vector2>),
// "List<Vector3>" => typeof(List<Vector3>),
//
// "List<List<int>>" => typeof(List<List<int>>),
// "List<List<float>>" => typeof(List<List<float>>),
// "List<List<string>>" => typeof(List<List<string>>),
// "List<List<bool>>" => typeof(List<List<bool>>),
// "List<List<Vector2>>" => typeof(List<List<Vector2>>),
// "List<List<Vector3>>" => typeof(List<List<Vector3>>),
//
// "enum" => typeof(Enum),
// "DateTime" => typeof(DateTime),
// _ => GetType(typeText)
};
}
public static Type GetTypeByString(string typeText) public static Type GetTypeByString(string typeText)
{ {
return typeText switch return typeText switch

Loading…
Cancel
Save