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 0000000..dd12bf4
Binary files /dev/null and b/Assets/_Project/ExcelResolver/Excel/com.xlsx differ
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