Browse Source

检查键是否有重复的

main
coffee 5 months ago
parent
commit
eccf607522
  1. 17
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs
  2. 8
      Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs
  3. BIN
      Assets/_Project/ExcelResolver/Excel/hero.xlsx
  4. 80
      Assets/_Project/ScriptableObject/Excel/Hero/Hero_5.asset
  5. 8
      Assets/_Project/ScriptableObject/Excel/Hero/Hero_5.asset.meta

17
Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs

@ -8,6 +8,7 @@ namespace Tools.ExcelResolver.Editor
{ {
internal static partial class ExcelResolverUtil internal static partial class ExcelResolverUtil
{ {
/*
/// <summary> /// <summary>
/// 读取指定行的数据 /// 读取指定行的数据
/// </summary> /// </summary>
@ -35,6 +36,19 @@ namespace Tools.ExcelResolver.Editor
values.Add(value); values.Add(value);
} }
return values; return values;
}*/
internal static Dictionary<int, string> ReadColumn(ExcelWorksheet worksheet, int col)
{
var endRow = worksheet.Dimension.End.Row;
var values = new Dictionary<int, string>(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;
} }
/// <summary> /// <summary>
@ -71,6 +85,7 @@ namespace Tools.ExcelResolver.Editor
$"Text: '<color=cyan>{cell.Text}</color>' "); $"Text: '<color=cyan>{cell.Text}</color>' ");
} }
/*
/// <summary> /// <summary>
/// 通用的单元格 -> C# 对象转换 /// 通用的单元格 -> C# 对象转换
/// </summary> /// </summary>
@ -169,6 +184,6 @@ namespace Tools.ExcelResolver.Editor
? boolValue ? boolValue
: (value == "1" || value.Equals("true", StringComparison.OrdinalIgnoreCase)) }, : (value == "1" || value.Equals("true", StringComparison.OrdinalIgnoreCase)) },
{ "string", value => value ?? string.Empty } { "string", value => value ?? string.Empty }
}; };*/
} }
} }

8
Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs

@ -109,6 +109,14 @@ namespace Tools.ExcelResolver.Editor
Assert.IsTrue(configs.Length >= 2, $"'{classCodeData.className}'配置错误,SingleKeyTable只能有一个主键"); Assert.IsTrue(configs.Length >= 2, $"'{classCodeData.className}'配置错误,SingleKeyTable只能有一个主键");
var key = configs[1]; var key = configs[1];
classCodeData.keyField = classCodeData.fields.Where(f => f.Value.varName == key).Select(p => p.Value).ToArray(); 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}'主键字段存在重复值:'<color=cyan>{duplicateValue.Key}</color>' " +
$"行号:{string.Join(",", duplicateValue.Select(g => g.Key))}");
}
} }
else if (config.Contains("UnionMultiKeyTable")) else if (config.Contains("UnionMultiKeyTable"))
{ {

BIN
Assets/_Project/ExcelResolver/Excel/hero.xlsx

Binary file not shown.

80
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

8
Assets/_Project/ScriptableObject/Excel/Hero/Hero_5.asset.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: c7b7eb46a7ca8244890947b043ee79ab
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
Loading…
Cancel
Save