From eccf607522ba12e38f6ed1ad7120ecc4283314ba Mon Sep 17 00:00:00 2001
From: coffee <985942825@qq.com>
Date: Mon, 27 Jan 2025 01:02:55 +0800
Subject: [PATCH] =?UTF-8?q?=E6=A3=80=E6=9F=A5=E9=94=AE=E6=98=AF=E5=90=A6?=
=?UTF-8?q?=E6=9C=89=E9=87=8D=E5=A4=8D=E7=9A=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Core/Util/ExcelResolverUtil.Cell.cs | 17 +++-
.../ExcelResolverEditorWindow.ReadExcel.cs | 8 ++
Assets/_Project/ExcelResolver/Excel/hero.xlsx | Bin 11078 -> 11123 bytes
.../ScriptableObject/Excel/Hero/Hero_5.asset | 80 ++++++++++++++++++
.../Excel/Hero/Hero_5.asset.meta | 8 ++
5 files changed, 112 insertions(+), 1 deletion(-)
create mode 100644 Assets/_Project/ScriptableObject/Excel/Hero/Hero_5.asset
create mode 100644 Assets/_Project/ScriptableObject/Excel/Hero/Hero_5.asset.meta
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs
index 5c5fb20..ca3e932 100644
--- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs
@@ -8,6 +8,7 @@ namespace Tools.ExcelResolver.Editor
{
internal static partial class ExcelResolverUtil
{
+ /*
///
/// 读取指定行的数据
///
@@ -35,6 +36,19 @@ namespace Tools.ExcelResolver.Editor
values.Add(value);
}
return values;
+ }*/
+ internal static Dictionary ReadColumn(ExcelWorksheet worksheet, int col)
+ {
+ var endRow = worksheet.Dimension.End.Row;
+ var values = new Dictionary(endRow);
+ for (int row = 1; row <= endRow; row++)
+ {
+ // 跳过注释行
+ if (worksheet.Cells[row, 1].Text == "##" || string.IsNullOrEmpty(worksheet.Cells[row, col].Text)) continue;
+ string value = worksheet.Cells[row, col].Text.Trim();
+ values.Add(row, value);
+ }
+ return values;
}
///
@@ -71,6 +85,7 @@ namespace Tools.ExcelResolver.Editor
$"Text: '{cell.Text}' ");
}
+ /*
///
/// 通用的单元格 -> C# 对象转换
///
@@ -169,6 +184,6 @@ namespace Tools.ExcelResolver.Editor
? boolValue
: (value == "1" || value.Equals("true", StringComparison.OrdinalIgnoreCase)) },
{ "string", value => value ?? string.Empty }
- };
+ };*/
}
}
\ No newline at end of file
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs
index 7635384..a770f1c 100644
--- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs
@@ -109,6 +109,14 @@ namespace Tools.ExcelResolver.Editor
Assert.IsTrue(configs.Length >= 2, $"'{classCodeData.className}'配置错误,SingleKeyTable只能有一个主键");
var key = configs[1];
classCodeData.keyField = classCodeData.fields.Where(f => f.Value.varName == key).Select(p => p.Value).ToArray();
+ Assert.IsTrue(classCodeData.keyField.Length == 1, $"'{classCodeData.className}'配置错误,主键字段不存在或重复");
+ var keyDict = ExcelResolverUtil.ReadColumn(worksheet, classCodeData.keyField[0].colIndex);
+ var duplicateValues = keyDict.GroupBy(x => x.Value).Where(g => g.Count() > 1);
+ foreach (var duplicateValue in duplicateValues)
+ {
+ throw new Exception($"'{classCodeData.className}'主键字段存在重复值:'{duplicateValue.Key}' " +
+ $"行号:{string.Join(",", duplicateValue.Select(g => g.Key))}");
+ }
}
else if (config.Contains("UnionMultiKeyTable"))
{
diff --git a/Assets/_Project/ExcelResolver/Excel/hero.xlsx b/Assets/_Project/ExcelResolver/Excel/hero.xlsx
index 07deefe224f51193ddbfbf57ceb70643117b3093..14728ee35eeac48eb026334fea8787b97e8d064c 100644
GIT binary patch
delta 2206
zcmV;P2x0feR`XV{o&kRz)BN9G0RRAO0ssIJ0001FZ(~q$Z*X%jV{dY0E_iKheUjfw
z!!Q`d?*-qX
z=lkWHkHmv{RR%9$Y@t6qsej2#WT+VM}+io1&&MZIBtMp
zy(gkAQi?sYo|>`+NP(e*3Y4>$b}0VwIxv;}bD&iYoK@i#wePfzd&rhzBktXETkMUq
z*{n0`wlREuiXVSRH+OB-uu#pe1fVpQf(ZlMX_E?_WdJ%;+D>zBVtk-Adn~ziBfs*j
z0C~Ac*KZ%|_s`YxYqflh@o(Lu+a?=6$iQb~nrOVdd5h^$i)G12T0r8$NvK({RXof1GNDT>lf0~jsySz
z*$@B#7yy&dDixETDg}R)Sle==I1qi`s{IFw_W^?)$9CDCif{2XncD2-nP54l0*D3K
z&dk?uOEMyA+t=2agf${VvyvcxKV@HlID^H#
zMsdWxi{+LD5mtZkTrL;qk`+#vUaR=jAn)EKY)+W{C>nC56iZe?{xt~xU#>xL6Z|B=gPTUC
zfr~Pv?=+-=Mqi_NCuJhvhh_XURau-@Rp_vd(+(~AZ7E_4N+D)1>gFAX7wvw%NvynzRP3pw^dfx!y}
zjGo7>p?d~nh42T2iWS<{$a<$}6pA3*ndtudQ1Ei8svj;pO8|~3n&lQDM_V7`^Ck6=8erkXqVP|y+>cYH^Xd}@U
z1_*x=ZE1iY(N+cs5^ZgOpmI0OkgWlNbln*sH*|$pSfj2=Rs~kFwkugRyL6jrJBn6;
zD_UfQnE_H+LCehdVedXp_inTWu2AY^Q%sBKJILla+7eBSV|Kp*}xTl^XDciO5M$
zNPyNb?TKwI-{j07tWpCxU@oJP42$dN9d5Wrb;BvJ(Z03y(yY@Lb))u9AzBrS)6cX?
zRP$U;z6w@U_d@3Cq2Wi34|Q;PjnOwMD>>>pDEnHYLW|mHlgKk$Z4!G1CgC{(+l_y!
zDcCu(BEQP1-M9RZaW#!M@JrJ?@L@$+*-bhMCiz`m)uJ==2O#W;a;i77}P*W?a8
z3*N{s$ls#0uwrt6{4EE3pUbnDxMnmHqwq+4r3}uV<+mgJ1VF&eEeBq%2TED_1x|0A
z_l2-iW@SM}@|Wlb{Nezeqj>~}eQ_7YAK4krSsp};-xrc>Az1j4QvE0~{tvTU2|fx0
zUot>mlb#dOf2E}5nv^_l;>`spU)MZ`6VDNzuHTczMEDNwY@u3&yCmp3rtlndreE5$
zPzoUlAfYJ6kP)9z$U?*wlt7~EkRY)G5l=8y%1D?JUXD&-NC@QbYzve&uz-On2@!)(
zdZeV*6iSmminTUj|bWL>Gw&s=x}G2rLemY-vEb&dwvVH`n6pTJ8jG9x#Clq2N4yPPrqAAG
zU%o*a;*@O{Awy~;oo-Z54l0xT`fL+M$|832b
z|F!oQvj`Ty5CSG8lgTDO0f3VUCo=)0lRYPs1s>D<-(Qo}CsY9*lPV}c0eF*ZC@=xc
zlbk3v0rQj7C@mXbGC*ER0ssK+1pojP000000000103ZMW0J)PJDM0~6lU*q~0cn$%
zDK-I+lg}wY0X35lDm($1lT9ii9P1a-(~blH0ND@#02lxO000000096X0002R1e4Gz
g6_cMTF9C^@&niU%c?*-!DixC}D-{OHCIA2c0C1-M=>Px#
delta 2176
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
C$L7%h
diff --git a/Assets/_Project/ScriptableObject/Excel/Hero/Hero_5.asset b/Assets/_Project/ScriptableObject/Excel/Hero/Hero_5.asset
new file mode 100644
index 0000000..24af453
--- /dev/null
+++ b/Assets/_Project/ScriptableObject/Excel/Hero/Hero_5.asset
@@ -0,0 +1,80 @@
+%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: e8aa3c1560079b84cafbabe4bc0d2c8d, type: 3}
+ m_Name: Hero_5
+ m_EditorClassIdentifier:
+ serializationData:
+ SerializedFormat: 2
+ SerializedBytes:
+ ReferencedUnityObjects: []
+ SerializedBytesString:
+ Prefab: {fileID: 0}
+ PrefabModificationsReferencedUnityObjects: []
+ PrefabModifications: []
+ SerializationNodes:
+ - Name: nihao
+ Entry: 7
+ Data: 0|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.Single,
+ mscorlib]], mscorlib
+ - Name: comparer
+ Entry: 7
+ Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
+ mscorlib]], mscorlib
+ - Name:
+ Entry: 8
+ Data:
+ - Name:
+ Entry: 12
+ Data: 0
+ - Name:
+ Entry: 13
+ Data:
+ - Name:
+ Entry: 8
+ Data:
+ - Name: attribute
+ Entry: 7
+ Data: 2|System.Collections.Generic.Dictionary`2[[Tools.ExcelResolver.Attribute,
+ Assembly-CSharp],[System.Int32, mscorlib]], mscorlib
+ - Name: comparer
+ Entry: 7
+ Data: 3|System.Collections.Generic.EnumEqualityComparer`1[[Tools.ExcelResolver.Attribute,
+ Assembly-CSharp]], mscorlib
+ - Name:
+ Entry: 12
+ Data: 0
+ - Name:
+ Entry: 13
+ Data:
+ - Name:
+ Entry: 8
+ Data:
+ - Name:
+ Entry: 12
+ Data: 0
+ - Name:
+ Entry: 13
+ Data:
+ - Name:
+ Entry: 8
+ Data:
+ id: 5
+ name:
+ icon:
+ has: 0
+ hp: 0
+ atk: 0
+ speed: 0
+ pos: {x: 0, y: 0, z: 0}
+ ches: {x: 0, y: 0}
+ attack_target: []
+ color: 0
diff --git a/Assets/_Project/ScriptableObject/Excel/Hero/Hero_5.asset.meta b/Assets/_Project/ScriptableObject/Excel/Hero/Hero_5.asset.meta
new file mode 100644
index 0000000..545c6ac
--- /dev/null
+++ b/Assets/_Project/ScriptableObject/Excel/Hero/Hero_5.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c7b7eb46a7ca8244890947b043ee79ab
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant: