From c1bbb0f4f78c122bd753d0d9e8406a9c80d02570 Mon Sep 17 00:00:00 2001 From: coffee <985942825@qq.com> Date: Mon, 3 Feb 2025 23:47:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/ExcelResolverEditorConfig.cs | 24 +++++++++++++------ .../ExcelResolverEditorWindow.ReadExcel.cs | 17 ++++++------- .../ExcelResolverEditorWindow.WriteDataSO.cs | 9 +------ .../Editor/ExcelResolverEditorWindow.cs | 17 +++---------- 4 files changed, 28 insertions(+), 39 deletions(-) diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorConfig.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorConfig.cs index 083b0dc..e52be42 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorConfig.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorConfig.cs @@ -1,24 +1,34 @@ using System.Collections.Generic; +using OfficeOpenXml; using Sirenix.OdinInspector; using Tools.Editor; +using UnityEngine; namespace Tools.ExcelResolver.Editor { [InlineEditor(InlineEditorObjectFieldModes.CompletelyHidden)] - public sealed class ExcelResolverEditorConfig : SerializedScriptableObject + internal sealed class ExcelResolverEditorConfig : SerializedScriptableObject { [LabelText("Excel路径"), FolderPath] - public string ExcelPathRoot = "Assets/_Project/ExcelResolver/Excel"; + [SerializeField] internal string ExcelPathRoot = "Assets/_Project/ExcelResolver/Excel"; [LabelText("C#代码路径"), ValueDropdown("@Tools.Editor.DirectoryUtil.GetFilePaths()")] - public string CodePathRoot = "Assets/_Project/Scripts/Generator/Excel"; + [SerializeField] internal string CodePathRoot = "Assets/_Project/Scripts/Generator/Excel"; [LabelText("SO存放路径"), ValueDropdown("@Tools.Editor.DirectoryUtil.GetFilePaths()")] - public string SOPathRoot = "Assets/_Project/ScriptableObject/Excel"; + [SerializeField] internal string SOPathRoot = "Assets/_Project/ScriptableObject/Excel"; [LabelText("生成代码命名空间")] - public string GenerateDataClassNameSpace = "Tools.ExcelResolver"; + [SerializeField] internal string GenerateDataClassNameSpace = "Tools.ExcelResolver"; - public Dictionary md5Dict = new(); + [LabelText("导表前清空Console")] + [SerializeField] internal bool isClearConsole = true; + [LabelText("使用MD5跳过未修改的表格")] + [SerializeField] internal bool useMD5 = true; + + + [ShowInInspector] internal Dictionary classCodeDataDict; + + [ShowInInspector] internal Dictionary md5Dict = new(); - public void MakeSureDirectory() + internal void MakeSureDirectory() { DirectoryUtil.MakeSureDirectory(ExcelPathRoot); DirectoryUtil.MakeSureDirectory(SOPathRoot); diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs index ec24838..7f92d51 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs @@ -13,9 +13,9 @@ namespace Tools.ExcelResolver.Editor { public sealed partial class ExcelResolverEditorWindow { - private void ReadExcel(bool onlyGetClassCodeData = false) + private void ReadExcel() { - classCodeDataDict = new Dictionary(); + excelResolverConfig.classCodeDataDict = new Dictionary(); // 获取Excel文件 excelResolverConfig.MakeSureDirectory(); @@ -32,7 +32,7 @@ namespace Tools.ExcelResolver.Editor using MD5 md5 = MD5.Create(); byte[] hash = md5.ComputeHash(stream);// 转换为十六进制字符串 var m = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant(); - if (excelResolverConfig.md5Dict.GetValueOrDefault(excelFile.FullName) == m && useMD5) + if (excelResolverConfig.md5Dict.GetValueOrDefault(excelFile.FullName) == m && excelResolverConfig.useMD5) { Debug.Log($"'{excelFile.Name}' 文件未发生变化,跳过"); continue; @@ -52,16 +52,13 @@ namespace Tools.ExcelResolver.Editor classCodeData.fields = GetFieldData(worksheet, classCodeData); classCodeData.tableType = CheckTableTypeAndSetKeyField(worksheet, classCodeData); - if (!onlyGetClassCodeData) - { - WriteDataCode(classCodeData); - WriteUtilCode(classCodeData); - } - classCodeDataDict.Add(worksheet, classCodeData); + WriteDataCode(classCodeData); + WriteUtilCode(classCodeData); + excelResolverConfig.classCodeDataDict.Add(worksheet, classCodeData); Debug.Log($"读取Excel文件:'{excelFile.Name}',并生成代码"); } - if (classCodeDataDict.Count == 0) + if (excelResolverConfig.classCodeDataDict.Count == 0) { Debug.LogError("未检测到Excel文件改动,如需重新生成,请清空md5Dict"); return; diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs index 0737228..ee89ee2 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs @@ -12,16 +12,9 @@ namespace Tools.ExcelResolver.Editor { public sealed partial class ExcelResolverEditorWindow { - [FoldoutGroup("Hide Setting")] - [ShowInInspector] private Dictionary classCodeDataDict; - private void WriteDataSO() { - if (classCodeDataDict == null) - { - ReadExcel(true); - } - foreach (var classCodeDataDictPair in classCodeDataDict) + foreach (var classCodeDataDictPair in excelResolverConfig.classCodeDataDict) { var worksheet = classCodeDataDictPair.Key; var classCodeData = classCodeDataDictPair.Value; diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs index 95fbd0e..b73a3db 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs @@ -12,12 +12,6 @@ namespace Tools.ExcelResolver.Editor { [SerializeField] private ExcelResolverEditorConfig excelResolverConfig; - [FoldoutGroup("Hide Setting"), LabelText("导表前是否清空Console")] - [SerializeField] private bool isClearConsole = true; - [FoldoutGroup("Hide Setting"), LabelText("是否使用MD5跳过未修改的表格")] - [SerializeField] private bool useMD5 = true; - - [MenuItem("\u272dExcelResolver\u272d/ExcelResolverEditorWindow")] private static void OpenWindow() { @@ -46,7 +40,7 @@ namespace Tools.ExcelResolver.Editor } [Button("删除所有生成的代码和SO", ButtonSizes.Gigantic, Icon = SdfIconType.ExclamationDiamond), GUIColor(1f, 0f, 0f)] - [ButtonGroup("Hide Setting/Button")] + [ButtonGroup("Button")] private void DeleteAllScriptsAndSO() { if (EditorUtility.DisplayDialog("警告", "确定要删除所有生成的代码和SO吗?", "确定", "取消")) @@ -59,7 +53,7 @@ namespace Tools.ExcelResolver.Editor } } - [ButtonGroup("Hide Setting/Button")] + [ButtonGroup("Button")] private void ClearMd5() { excelResolverConfig.md5Dict.Clear(); @@ -76,7 +70,7 @@ namespace Tools.ExcelResolver.Editor private void StartExportExcel() { Debug.Log("Before GC: " + System.GC.GetTotalMemory(false) + " bytes"); - if (isClearConsole) + if (excelResolverConfig.isClearConsole) { UnityEditorUtil.ClearConsole(); } @@ -90,11 +84,6 @@ namespace Tools.ExcelResolver.Editor protected override void OnDestroy() { base.OnDestroy(); - foreach (var pair in classCodeDataDict) - { - pair.Value.Dispose(); - } - classCodeDataDict.Clear(); ExcelResolverUtil.Dispose(); } }