From 984fa9b1027b7764cafffa153bd54ba8af989f22 Mon Sep 17 00:00:00 2001 From: coffee <985942825@qq.com> Date: Sun, 5 Jan 2025 15:57:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExcelResolver/Editor/ClassCodeData.cs | 4 +- .../ExcelResolverEditorWindow.ReadExcel.cs | 4 +- ...ExcelResolverEditorWindow.WriteDataCode.cs | 48 ++++++++++++++++++- .../ExcelResolverEditorWindow.WriteSOCode.cs | 27 ++++++++++- .../Editor/ExcelResolverEditorWindow.cs | 1 - 5 files changed, 77 insertions(+), 7 deletions(-) diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ClassCodeData.cs b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ClassCodeData.cs index 7755513..8706779 100644 --- a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ClassCodeData.cs +++ b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ClassCodeData.cs @@ -28,7 +28,7 @@ namespace Tools.ExcelResolver.Editor internal class FieldData : IDisposable { - public string name; + public string varName; public Type type; public string info; public string description; @@ -36,7 +36,7 @@ namespace Tools.ExcelResolver.Editor public void Dispose() { - name = null; + varName = null; type = null; info = null; description = null; diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs index 2d7e705..984b9ae 100644 --- a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs +++ b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs @@ -38,7 +38,7 @@ namespace Tools.ExcelResolver.Editor WriteSOCode(classCodeData); } - AssetDatabase.Refresh(); + // AssetDatabase.Refresh(); } private TableType CheckTableType(ExcelWorksheet worksheet, out int[] keyIndex) @@ -128,7 +128,7 @@ namespace Tools.ExcelResolver.Editor { FieldData fieldData = new FieldData { - name = worksheet.Cells[2, col].Text, + varName = worksheet.Cells[2, col].Text, type = TypeUtil.GetTypeByString(worksheet.Cells[3, col].Text), info = worksheet.Cells[4, col].Text, description = worksheet.Cells[5, col].Text, diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs index 1327ed1..ed2c3e8 100644 --- a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs +++ b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs @@ -14,9 +14,16 @@ namespace Tools.ExcelResolver.Editor { string outputPath = $"{excelResolverConfig.CodePathRoot}/{classCodeData.className}.cs"; CodeCompileUnit compileUnit = new CodeCompileUnit(); + + #region 命名空间 + CodeNamespace codeNamespace = new CodeNamespace(excelResolverConfig.GenerateDataClassNameSpace); compileUnit.Namespaces.Add(codeNamespace); + #endregion + + #region 引用 + string[] classImports = new string[] { "System", @@ -29,6 +36,10 @@ namespace Tools.ExcelResolver.Editor codeNamespace.Imports.Add(new CodeNamespaceImport(import)); } + #endregion + + #region 类 + CodeTypeDeclaration classType = new CodeTypeDeclaration(classCodeData.className) { IsClass = true, @@ -41,18 +52,53 @@ namespace Tools.ExcelResolver.Editor }; codeNamespace.Types.Add(classType); + #endregion + + #region 字段 + + foreach (var field in classCodeData.fields) + { + CodeMemberField codeField = new CodeMemberField + { + Attributes = MemberAttributes.Public, + Name = field.varName, + Type = new CodeTypeReference(field.type), + Comments = + { + new CodeCommentStatement("", true), + new CodeCommentStatement(field.info, true), + // new CodeCommentStatement($"{field.description}", true), + // new CodeCommentStatement("", true), + }, + }; + if (!string.IsNullOrEmpty(field.description)) + codeField.Comments.Add(new CodeCommentStatement($"{field.description}", true)); + codeField.Comments.Add(new CodeCommentStatement("", true)); + classType.Members.Add(codeField); + } + + #endregion + + #region 代码风格设置 + CodeGeneratorOptions options = new CodeGeneratorOptions { BracingStyle = "C", - BlankLinesBetweenMembers = false, + BlankLinesBetweenMembers = true, VerbatimOrder = true, }; + #endregion + + #region 写入文件 + using (StreamWriter writer = new StreamWriter(outputPath)) { CSharpCodeProvider provider = new CSharpCodeProvider(); provider.GenerateCodeFromCompileUnit(compileUnit, writer, options); } + + #endregion } } } \ No newline at end of file diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOCode.cs b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOCode.cs index 2186f4b..e58f3c7 100644 --- a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOCode.cs +++ b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOCode.cs @@ -11,9 +11,16 @@ namespace Tools.ExcelResolver.Editor { string outputPath = $"{excelResolverConfig.CodePathRoot}/{classCodeData.className}SO.cs"; CodeCompileUnit compileUnit = new CodeCompileUnit(); + + #region 命名空间 + CodeNamespace codeNamespace = new CodeNamespace(excelResolverConfig.GenerateDataClassNameSpace); compileUnit.Namespaces.Add(codeNamespace); + #endregion + + #region 引用 + string[] classImports = new string[] { "System", @@ -26,6 +33,10 @@ namespace Tools.ExcelResolver.Editor codeNamespace.Imports.Add(new CodeNamespaceImport(import)); } + #endregion + + #region 类 + CodeTypeDeclaration classType = new CodeTypeDeclaration($"{classCodeData.className}SO") { IsClass = true, @@ -38,18 +49,32 @@ namespace Tools.ExcelResolver.Editor }; codeNamespace.Types.Add(classType); + #endregion + + + + + + #region 代码风格设置 + CodeGeneratorOptions options = new CodeGeneratorOptions { BracingStyle = "C", - BlankLinesBetweenMembers = false, + BlankLinesBetweenMembers = true, VerbatimOrder = true, }; + #endregion + + #region 写入文件 + using (StreamWriter writer = new StreamWriter(outputPath)) { CSharpCodeProvider provider = new CSharpCodeProvider(); provider.GenerateCodeFromCompileUnit(compileUnit, writer, options); } + + #endregion } } } \ No newline at end of file diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.cs b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.cs index fc963cf..dd876ca 100644 --- a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.cs +++ b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.cs @@ -42,7 +42,6 @@ namespace Tools.ExcelResolver.Editor [Button(ButtonSizes.Gigantic)] private void Generate() { - // 按钮逻辑 ReadExcel(); } }