From fbefdcb7942935f6be81e16a1d1a90b06afe4995 Mon Sep 17 00:00:00 2001
From: coffee <985942825@qq.com>
Date: Mon, 3 Feb 2025 17:25:36 +0800
Subject: [PATCH] =?UTF-8?q?=E7=BA=B5=E8=A1=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Editor/Core/Data/FieldData.cs | 6 +-
.../ExcelResolverEditorWindow.ReadExcel.cs | 55 +++++++++++++-----
...ExcelResolverEditorWindow.WriteDataCode.cs | 5 +-
.../ExcelResolverEditorWindow.WriteDataSO.cs | 17 ++++--
...ExcelResolverEditorWindow.WriteUtilCode.cs | 8 ++-
.../ExcelResolverEditorWindow.WriteUtilSO.cs | 40 ++++++++++++-
Assets/_Project/ExcelResolver/Excel/com.xlsx | Bin 0 -> 11149 bytes
.../ExcelResolver/Excel/com.xlsx.meta | 7 +++
.../_Project/ScriptableObject/Excel/Com.meta | 8 +++
.../ScriptableObject/Excel/Com/_ComUtil.asset | 26 +++++++++
.../Excel/Com/_ComUtil.asset.meta | 8 +++
.../Scripts/Generator/Excel/ComUtil.cs | 38 ++++++++++++
.../Scripts/Generator/Excel/ComUtil.cs.meta | 2 +
13 files changed, 196 insertions(+), 24 deletions(-)
create mode 100644 Assets/_Project/ExcelResolver/Excel/com.xlsx
create mode 100644 Assets/_Project/ExcelResolver/Excel/com.xlsx.meta
create mode 100644 Assets/_Project/ScriptableObject/Excel/Com.meta
create mode 100644 Assets/_Project/ScriptableObject/Excel/Com/_ComUtil.asset
create mode 100644 Assets/_Project/ScriptableObject/Excel/Com/_ComUtil.asset.meta
create mode 100644 Assets/_Project/Scripts/Generator/Excel/ComUtil.cs
create mode 100644 Assets/_Project/Scripts/Generator/Excel/ComUtil.cs.meta
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/FieldData.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/FieldData.cs
index 0195c0e..544fc30 100644
--- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/FieldData.cs
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/FieldData.cs
@@ -5,6 +5,10 @@ namespace Tools.ExcelResolver.Editor
{
internal class FieldData : IDisposable
{
+ ///
+ /// 行索引
+ /// 如果是纵表,这个值表示列索引
+ ///
public int colIndex;
public string varName;
@@ -14,7 +18,7 @@ namespace Tools.ExcelResolver.Editor
public string description;
public string path;
- internal CodeMemberField GetCodeField()
+ internal CodeMemberField GetCodeMemberField()
{
CodeMemberField codeField = new CodeMemberField
{
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs
index c8fb720..ec24838 100644
--- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs
@@ -55,7 +55,7 @@ namespace Tools.ExcelResolver.Editor
if (!onlyGetClassCodeData)
{
WriteDataCode(classCodeData);
- WriteSOCode(classCodeData);
+ WriteUtilCode(classCodeData);
}
classCodeDataDict.Add(worksheet, classCodeData);
Debug.Log($"读取Excel文件:'{excelFile.Name}',并生成代码");
@@ -205,23 +205,48 @@ namespace Tools.ExcelResolver.Editor
private Dictionary GetFieldData(ExcelWorksheet worksheet, ClassCodeData classCodeData)
{
var fieldDatas = new Dictionary();
-
- for (int col = 2; col <= worksheet.Dimension.End.Column; col++)
+
+ // 横表
+ if (!worksheet.Cells[1, 1].Text.Contains("ColumnTable", StringComparison.OrdinalIgnoreCase))
{
- var cellText = worksheet.Cells[2, col].Text;
- if (string.IsNullOrEmpty(cellText) || cellText == "##") continue;
+ for (int col = 2; col <= worksheet.Dimension.End.Column; col++)
+ {
+ var varText = worksheet.Cells[2, col].Text;
+ if (string.IsNullOrEmpty(varText) || varText == "##") continue;
- FieldData fieldData = new FieldData
+ FieldData fieldData = new FieldData
+ {
+ colIndex = col,
+ varName = varText,
+ // typeString = worksheet.Cells[3, col].Text,
+ type = ExcelResolverUtil.GetTTypeByString(worksheet.Cells[3, col].Text, worksheet.Cells[3, col], classCodeData.className),
+ info = worksheet.Cells[4, col].Text,
+ description = worksheet.Cells[5, col].Text,
+ path = worksheet.Cells[6, col].Text,
+ };
+ fieldDatas.Add(col, fieldData);
+ }
+ }
+ // 纵表
+ else
+ {
+ for (int row = 2; row <= worksheet.Dimension.End.Row; row++)
{
- colIndex = col,
- varName = cellText,
- // typeString = worksheet.Cells[3, col].Text,
- type = ExcelResolverUtil.GetTTypeByString(worksheet.Cells[3, col].Text, worksheet.Cells[3, col], classCodeData.className),
- info = worksheet.Cells[4, col].Text,
- description = worksheet.Cells[5, col].Text,
- path = worksheet.Cells[6, col].Text,
- };
- fieldDatas.Add(col, fieldData);
+ var varText = worksheet.Cells[row, 1].Text;
+ if (string.IsNullOrEmpty(varText) || varText.StartsWith("##")) continue;
+
+ FieldData fieldData = new FieldData
+ {
+ colIndex = row,
+ varName = varText,
+ // typeString = worksheet.Cells[row, 2].Text,
+ type = ExcelResolverUtil.GetTTypeByString(worksheet.Cells[row, 2].Text, worksheet.Cells[row, 2], classCodeData.className),
+ info = worksheet.Cells[row, 4].Text,
+ description = worksheet.Cells[row, 5].Text,
+ path = worksheet.Cells[row, 6].Text,
+ };
+ fieldDatas.Add(row, fieldData);
+ }
}
// 判断是否有重复的varName
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs
index 3d867e1..2e5c28f 100644
--- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs
@@ -14,6 +14,9 @@ namespace Tools.ExcelResolver.Editor
{
private void WriteDataCode(ClassCodeData classCodeData)
{
+ // 纵表不生成Data类
+ if (classCodeData.tableType == TableType.ColumnTable) return;
+
string outputPath = $"{excelResolverConfig.CodePathRoot}/{classCodeData.className}.cs";
CodeCompileUnit compileUnit = new CodeCompileUnit();
@@ -65,7 +68,7 @@ namespace Tools.ExcelResolver.Editor
foreach (var field in classCodeData.fields.Values)
{
- classType.Members.Add(field.GetCodeField());
+ classType.Members.Add(field.GetCodeMemberField());
}
#endregion
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs
index 3ec6cb9..0737228 100644
--- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs
@@ -30,6 +30,14 @@ namespace Tools.ExcelResolver.Editor
var path = $"{excelResolverConfig.SOPathRoot}/{classCodeData.className}/";
DirectoryUtil.MakeSureDirectory(path);
+
+ // 纵表不生成Data类,直接生成Util类
+ if (classCodeData.tableType == TableType.ColumnTable)
+ {
+ WriteUtilSO(path, worksheet, classCodeData);
+ continue;
+ }
+
string[] assetGuids = AssetDatabase.FindAssets($"t:{dataName}", new[] { path });
Dictionary originAssets = new();
for (int i = 0; i < assetGuids.Length; i++)
@@ -54,7 +62,7 @@ namespace Tools.ExcelResolver.Editor
if (originAssets.ContainsKey(assetName))
{
- set(originAssets[assetName], worksheet, row, classCodeData);
+ setValue(originAssets[assetName], worksheet, row, classCodeData);
EditorUtility.SetDirty(originAssets[assetName]);
Debug.Log($"刷新:{assetName}", originAssets[assetName]);
result.Add(originAssets[assetName]);
@@ -63,7 +71,7 @@ namespace Tools.ExcelResolver.Editor
else
{
ScriptableObject instance = ScriptableObject.CreateInstance(dataName);
- set(instance, worksheet, row, classCodeData);
+ setValue(instance, worksheet, row, classCodeData);
AssetDatabase.CreateAsset(instance, fullPath);
Debug.Log($"创建:{assetName}", instance);
result.Add(instance);
@@ -83,7 +91,8 @@ namespace Tools.ExcelResolver.Editor
GC.Collect();
GC.WaitForPendingFinalizers();
- void set(ScriptableObject instance, ExcelWorksheet worksheet, int row, ClassCodeData classCodeData)
+ // 横表
+ void setValue(ScriptableObject instance, ExcelWorksheet worksheet, int row, ClassCodeData classCodeData)
{
foreach (var pair in classCodeData.fields)
{
@@ -128,8 +137,6 @@ namespace Tools.ExcelResolver.Editor
}
case TableType.NotKetTable:
return $"{classCodeData.className}_{row}";
- case TableType.ColumnTable:
- return $"{classCodeData.className}_{classCodeData.fields[2].varName}";
}
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilCode.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilCode.cs
index c4996a6..1b4f01e 100644
--- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilCode.cs
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilCode.cs
@@ -10,7 +10,7 @@ namespace Tools.ExcelResolver.Editor
{
public sealed partial class ExcelResolverEditorWindow
{
- private void WriteSOCode(ClassCodeData classCodeData)
+ private void WriteUtilCode(ClassCodeData classCodeData)
{
string outputPath = $"{excelResolverConfig.CodePathRoot}/{classCodeData.className}Util.cs";
CodeCompileUnit compileUnit = new CodeCompileUnit();
@@ -119,7 +119,13 @@ namespace Tools.ExcelResolver.Editor
break;
}
case TableType.ColumnTable:
+ {
+ foreach (var fieldData in classCodeData.fields.Values)
+ {
+ codeFields.Add(fieldData.GetCodeMemberField());
+ }
break;
+ }
}
foreach (var codeField in codeFields)
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilSO.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilSO.cs
index 69f6e35..6a1be88 100644
--- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilSO.cs
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilSO.cs
@@ -2,6 +2,8 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
+using System.Reflection;
+using OfficeOpenXml;
using UnityEditor;
using UnityEngine;
@@ -160,9 +162,45 @@ namespace Tools.ExcelResolver.Editor
break;
}
case TableType.ColumnTable:
- break;
+ throw new ArgumentException("ColumnTable 应该使用另一个WriteUtilSO方法.");
+ }
+ EditorUtility.SetDirty(instance);
+ }
+
+ private void WriteUtilSO(string path, ExcelWorksheet worksheet, ClassCodeData classCodeData)
+ {
+ if (classCodeData.tableType != TableType.ColumnTable)
+ throw new ArgumentException("只有ColumnTable才能使用此方法.");
+
+ var utilName = $"{classCodeData.className}Util";
+ var utilPath = $"{path}/_{utilName}.asset";
+
+ var instance = AssetDatabase.LoadAssetAtPath(utilPath);
+ if (instance == null)
+ {
+ instance = ScriptableObject.CreateInstance(utilName);
+ AssetDatabase.CreateAsset(instance, utilPath);
}
+
+ setValue(instance, worksheet, classCodeData);
+
EditorUtility.SetDirty(instance);
+
+ // 纵表
+ void setValue(ScriptableObject instance, ExcelWorksheet worksheet, ClassCodeData classCodeData)
+ {
+ foreach (var pair in classCodeData.fields)
+ {
+ var row = pair.Key;
+ var fieldData = pair.Value;
+
+ var cell = worksheet.Cells[row, 3];
+ object convertedValue = ExcelResolverUtil.ConvertCellValue(cell, fieldData.type, classCodeData.className);
+ FieldInfo fieldInfo = instance.GetType().GetField(fieldData.varName);
+ if (fieldInfo == null) throw new Exception($"{classCodeData.className}中不存在字段:{fieldData.varName}");
+ fieldInfo.SetValue(instance, convertedValue);
+ }
+ }
}
}
}
\ No newline at end of file
diff --git a/Assets/_Project/ExcelResolver/Excel/com.xlsx b/Assets/_Project/ExcelResolver/Excel/com.xlsx
new file mode 100644
index 0000000000000000000000000000000000000000..dd12bf4cf55245a31167e1531c5eb40dab494014
GIT binary patch
literal 11149
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
literal 0
HcmV?d00001
diff --git a/Assets/_Project/ExcelResolver/Excel/com.xlsx.meta b/Assets/_Project/ExcelResolver/Excel/com.xlsx.meta
new file mode 100644
index 0000000..629a8c7
--- /dev/null
+++ b/Assets/_Project/ExcelResolver/Excel/com.xlsx.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: c603f54d33a16b74f96c74e8b403ca0b
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/_Project/ScriptableObject/Excel/Com.meta b/Assets/_Project/ScriptableObject/Excel/Com.meta
new file mode 100644
index 0000000..1826f9d
--- /dev/null
+++ b/Assets/_Project/ScriptableObject/Excel/Com.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5d697dbce85032d4dba2a90d7bb50290
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/_Project/ScriptableObject/Excel/Com/_ComUtil.asset b/Assets/_Project/ScriptableObject/Excel/Com/_ComUtil.asset
new file mode 100644
index 0000000..7886603
--- /dev/null
+++ b/Assets/_Project/ScriptableObject/Excel/Com/_ComUtil.asset
@@ -0,0 +1,26 @@
+%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: 65d0d896e6a9aba4c86524d1ead223f2, type: 3}
+ m_Name: _ComUtil
+ m_EditorClassIdentifier:
+ serializationData:
+ SerializedFormat: 2
+ SerializedBytes:
+ ReferencedUnityObjects: []
+ SerializedBytesString:
+ Prefab: {fileID: 0}
+ PrefabModificationsReferencedUnityObjects: []
+ PrefabModifications: []
+ SerializationNodes: []
+ cangku_chushi: 3
+ des_xishu: 2
+ ta_chushi_unlock: 01000000cc00000091010000cb000000
diff --git a/Assets/_Project/ScriptableObject/Excel/Com/_ComUtil.asset.meta b/Assets/_Project/ScriptableObject/Excel/Com/_ComUtil.asset.meta
new file mode 100644
index 0000000..8a6c35f
--- /dev/null
+++ b/Assets/_Project/ScriptableObject/Excel/Com/_ComUtil.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7ee0eb7708acae845ae0445697042da4
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/_Project/Scripts/Generator/Excel/ComUtil.cs b/Assets/_Project/Scripts/Generator/Excel/ComUtil.cs
new file mode 100644
index 0000000..9d6fd43
--- /dev/null
+++ b/Assets/_Project/Scripts/Generator/Excel/ComUtil.cs
@@ -0,0 +1,38 @@
+//------------------------------------------------------------------------------
+//
+// 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 ComUtil : SerializedScriptableObject, IExcelSOUtil
+ {
+
+ ///
+ /// 初始仓库空位数
+ ///
+ public int cangku_chushi;
+
+ ///
+ /// 防御系数
+ ///
+ public int des_xishu;
+
+ ///
+ /// 初始解锁的塔
+ ///
+ public List ta_chushi_unlock;
+ }
+}
diff --git a/Assets/_Project/Scripts/Generator/Excel/ComUtil.cs.meta b/Assets/_Project/Scripts/Generator/Excel/ComUtil.cs.meta
new file mode 100644
index 0000000..0090571
--- /dev/null
+++ b/Assets/_Project/Scripts/Generator/Excel/ComUtil.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 65d0d896e6a9aba4c86524d1ead223f2
\ No newline at end of file