From b8f3afdbe93abae7cd3559957ccd6de1f1f37f6a Mon Sep 17 00:00:00 2001 From: coffee <985942825@qq.com> Date: Sat, 4 Jan 2025 23:27:42 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/ExcelResolver/Excel/hero.xlsx | Bin 10350 -> 10407 bytes .../ExcelResolverEditorWindow.ReadExcel.cs | 102 +++++++++++++++--- ...ExcelResolverEditorWindow.WriteDataCode.cs | 2 + .../Editor/ExcelResolverEditorWindow.cs | 19 ++-- 4 files changed, 97 insertions(+), 26 deletions(-) diff --git a/Assets/ExcelResolver/Excel/hero.xlsx b/Assets/ExcelResolver/Excel/hero.xlsx index 724bc1f04af0f2fcbdd19e6e9d922802e555f4c3..e86baa03c18775d9e157e8b9e4f30258ff9886ff 100644 GIT binary patch delta 2224 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 delta 2152 zcmV-u2$%P#QSMN%o&g0UO=BxvlcNDDe@n8hLrT|y%B~y;P89D#@^>q?Nl7xhUHb-t z-un`=2io4lwB2fl;$?Eq|K*&YM3Z%%c`u+%s^l2a9zh;Ru0$#qV{|{C`WMJEmPx@f zC1H#%Wwtsi%$5FA4WIY?_T?NR*WwV-qJ=RmD=oOx2V($-j(Wv?96Fx?Q;WMlMeZCyNXE;M1g=jUC=;Htau<>x-`7{S#F2`YDb0Ba zA$b8w?v@`vENU*E&LVk5bRk&<70-w23W+New`Dm~FIsLF5U4XxUDs}1 zNjE7^Q5XpdrXHy1AQdlSswi15bbkdNg|}R!471pj-Vu<6y_& z-^B?i+Hs}VidWi-$=q^paQ2p|dxbl`_-BLM&aaFb0E z9e=?}!$1%Q;Je^Egw5G*nnMvu(u3d==vkIz+AJos>+ZDJTLqz_h=Lx39z;C!;6=}Q zp0v$d7(o#>c${zMpMhng;YC?^Q!rL4j9I@IFb^b65^*YVc zZERLmGk+9$LX2ZW(-u{^63s6e~1QY-O00;nwPU1i?HrP4j z0RR9yle`lce_e0dFcf{CwEtlF9h?tB2_mUTAzGzURg}@~Y4Q?>SWWE6HiK!}f8TWi zv=h^mr~7q$eD1yW?Dkk!=m%4pOA%pr=wQS|CUY)!5&pbM2NR66p(3Z16fD9&nZ~#A z#}BiERIlHqd__PYbc9P|nkgYVD_KqTP&Q0JrI4zoe+ELeBf3$H=DK9e)D`g@XH06! z1@0K8st<=O3ZAir%=R@CrXx|Tq6Xyak~bR1vw~M_+jWF!(>&4|bRR2>Dyq#g=Z57G z_92u9_Lc}RQu`*^^9rh=?|7KRmnNSS1h(5PX9xY3w;?)kk;}si&rKO&FPJzm!!GxU z@m*OOZZ!xh?lhX((GZuMWG zq3sJd_!qR_s%uLiDWg^Pq>weOh|qPs&?4B;JZRHev{yXBzmi~*IDY62MyZ<)MsDZ~ zl4Lv@1dG%UZrsJ)GDv@)SA4XL#nql`o++tiWnqSytVy@xtJmUANPC)5vsds4<5|Zx zwb}HPy(Eh+aT@Di7fja++sf(m|A5c%2`bhToNjvp?;cm1RZr~0a`Wva?F*i-lEu6~ ze!gDMziyUa&R39s4wS&o;o+V)PtN~7{sXhA6@Lx^A(JU2KmmJ`Y9uoOpOc;>lLaJA zV=G;gHYHR69FvPBKmm4>%q1`a#~_pbB{c%>Ad@vFEE{y-hiW4M003|T000yK00000 z00031AOHXW3X^;$K>=`+z9u>Wx|8`PHUi-blQAbH8!$H5IphHV06PQ#01p5F00000 z0096X0001AlW`|J0hg1mCm|d_jF>Uu0ssK{2LJ#V000000000103ZMW0K){6F(?(1 eC@%uq2a_= !f.Name.StartsWith("~$")); + var excelFiles = new DirectoryInfo(excelResolverConfig.ExcelPathRoot).GetFiles("*.xlsx") + .Where(f => !f.Name.StartsWith("~$")); foreach (var excelFile in excelFiles) { - using FileStream stream = File.Open(excelFile.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + using FileStream stream = File.Open(excelFile.FullName, FileMode.Open, FileAccess.Read, + FileShare.ReadWrite); using ExcelPackage package = new ExcelPackage(stream); ExcelWorksheet worksheet = package.Workbook.Worksheets["Sheet1"]; if (null == worksheet) @@ -32,22 +36,86 @@ namespace Tools.ExcelResolver.Editor Debug.LogError($"Excel:{excelFile.Name} don't have Sheet1 !!"); continue; } - ExcelRange first = worksheet.Cells[1, 1]; - switch (first) + var type = CheckTableType(worksheet); + foreach (var i in keyIndex) { - + Debug.Log($"{type} {i}"); } } } + + private TableType CheckTableType(ExcelWorksheet worksheet) + { + var startColumn = worksheet.Dimension.Start.Column; // 起始列 + var endColumn = worksheet.Dimension.End.Column; // 结束列 + + string config = worksheet.Cells[1, 1].Value.ToString(); + var type = TableType.SingleKeyTable; + if (config.Contains("SingleKeyTable")) + { + type = TableType.SingleKeyTable; + var configs = config.Split("|"); + Assert.IsTrue(configs.Length >= 2, "SingleKeyTable配置错误"); + var key = configs[1]; + var index = getKeyIndex(key); + Assert.IsTrue(index != -1, "SingleKeyTable配置错误"); + keyIndex = new[] { index }; + } + else if (config.Contains("UnionMultiKeyTable")) + { + type = TableType.UnionMultiKeyTable; + var configs = config.Split("|"); + Assert.IsTrue(configs.Length >= 2, "UnionMultiKeyTable配置错误"); + var keys = configs[1].Split(","); + keyIndex = new int[keys.Length]; + for (int i = 0; i < keys.Length; i++) + { + var index = getKeyIndex(keys[i]); + Assert.IsTrue(index != -1, "UnionMultiKeyTable配置错误"); + keyIndex[i] = index; + } + } + else if (config.Contains("MultiKeyTable")) + { + type = TableType.MultiKeyTable; + var configs = config.Split("|"); + Assert.IsTrue(configs.Length >= 2, "UnionMultiKeyTable配置错误"); + var keys = configs[1].Split(","); + keyIndex = new int[keys.Length]; + for (int i = 0; i < keys.Length; i++) + { + var index = getKeyIndex(keys[i]); + Assert.IsTrue(index != -1, "UnionMultiKeyTable配置错误"); + keyIndex[i] = index; + } + } + else if (config.Contains("NotKetTable")) + { + type = TableType.NotKetTable; + } + else if (config.Contains("ColumnTable")) + { + type = TableType.ColumnTable; + } + return type; - private TableType CheckTableType(ExcelRange first) - { - string tableConfig = first.Value.ToString(); - - - return TableType.SingleKeyTable; + int getKeyIndex(string key) + { + int keyIndex = -1; + for (int col = startColumn; col <= endColumn; col++) + { + var cellValue = worksheet.Cells[2, col].Text; // 获取第二行第 col 列的文本值 + if (string.Equals(cellValue, key, StringComparison.OrdinalIgnoreCase)) // 忽略大小写比较 + { + keyIndex = col; + break; + } + } + + return keyIndex; + } } } } \ No newline at end of file diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs index 661af5a..20a17b0 100644 --- a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs +++ b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs @@ -4,6 +4,8 @@ namespace Tools.ExcelResolver.Editor { public sealed partial class ExcelResolverEditorWindow { + private int[] keyIndex; + private void WriteTypeCode() { var code = new RootCode(); diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.cs b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.cs index 5011a0f..fc963cf 100644 --- a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.cs +++ b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.cs @@ -29,16 +29,17 @@ namespace Tools.ExcelResolver.Editor } } - [OnInspectorGUI] - private void DrawGenerateButton() - { - GUILayout.FlexibleSpace(); // 把空白区域推向上方 - if (GUILayout.Button("Generate", GUILayout.Height(50))) - { - Generate(); - } - } + // [OnInspectorGUI] + // private void DrawGenerateButton() + // { + // GUILayout.FlexibleSpace(); // 把空白区域推向上方 + // if (GUILayout.Button("Generate", GUILayout.Height(50))) + // { + // Generate(); + // } + // } + [Button(ButtonSizes.Gigantic)] private void Generate() { // 按钮逻辑