Browse Source

代码优化

master
coffee 5 months ago
parent
commit
93242c29f4
  1. 4
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data/ClassCodeData.cs
  2. 114
      Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs
  3. 3
      Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilCode.cs

4
Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data/ClassCodeData.cs

@ -8,8 +8,8 @@ namespace Tools.ExcelResolver.Editor
public string className; public string className;
public Dictionary<int, FieldData> fields = new(); public Dictionary<int, FieldData> fields = new();
// public FieldData[] fields; // public FieldData[] fields;
public int[] keyIndex; // public int[] keyIndex;
// public FieldData[] keyField; public FieldData[] keyField;
public ClassCodeData(string className) public ClassCodeData(string className)
{ {

114
Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs

@ -1,5 +1,4 @@
using System; using System.Collections.Generic;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using OfficeOpenXml; using OfficeOpenXml;
@ -32,11 +31,8 @@ namespace Tools.ExcelResolver.Editor
var classCodeData = new ClassCodeData(excelFile.Name[..^5]); var classCodeData = new ClassCodeData(excelFile.Name[..^5]);
var fieldDatas = GetFieldData(worksheet); classCodeData.fields = GetFieldData(worksheet, classCodeData);
classCodeData.fields = fieldDatas; classCodeData.tableType = CheckTableType(worksheet, classCodeData);
var tableType = CheckTableType(worksheet, classCodeData.className, out var keyIndex);
classCodeData.tableType = tableType;
classCodeData.keyIndex = keyIndex;
WriteDataCode(classCodeData); WriteDataCode(classCodeData);
@ -47,87 +43,45 @@ namespace Tools.ExcelResolver.Editor
AssetDatabase.Refresh(); AssetDatabase.Refresh();
} }
private TableType CheckTableType(ExcelWorksheet worksheet, string className, out int[] keyIndex) private TableType CheckTableType(ExcelWorksheet worksheet, ClassCodeData classCodeData)
{ {
var startColumn = worksheet.Dimension.Start.Column; // 起始列 var tableType = TableType.SingleKeyTable;
var endColumn = worksheet.Dimension.End.Column; // 结束列
string config = worksheet.Cells[1, 1].Text; string config = worksheet.Cells[1, 1].Text;
var type = TableType.SingleKeyTable;
keyIndex = null;
if (config.Contains("SingleKeyTable")) if (config.Contains("SingleKeyTable"))
{ {
type = TableType.SingleKeyTable; tableType = TableType.SingleKeyTable;
var configs = config.Split("|"); var configs = config.Split("|");
Assert.IsTrue(configs.Length >= 2, $"'{className}'配置错误"); Assert.IsTrue(configs.Length >= 2, $"'{classCodeData.className}'配置错误,SingleKeyTable只能有一个主键");
var key = configs[1]; var key = configs[1];
var index = getKeyIndex(key); classCodeData.keyField = classCodeData.fields.Where(f => f.Value.varName == key).Select(p => p.Value).ToArray();
Assert.IsTrue(index != -1, $"'{className}'配置错误");
keyIndex = new[] { index };
} }
// else if (config.Contains("UnionMultiKeyTable")) 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;
// }
// else
// {
// Debug.LogError("配置错误");
// }
return type;
int getKeyIndex(string key)
{ {
int keyIndex = -1; tableType = TableType.UnionMultiKeyTable;
for (int col = startColumn; col <= endColumn; col++) }
{ else if (config.Contains("MultiKeyTable"))
var cellValue = worksheet.Cells[2, col].Text; // 获取第二行第 col 列的文本值 {
if (string.Equals(cellValue, key, StringComparison.OrdinalIgnoreCase)) // 忽略大小写比较 tableType = TableType.MultiKeyTable;
{ }
keyIndex = col; else if (config.Contains("NotKetTable"))
break; {
} tableType = TableType.NotKetTable;
}
return keyIndex;
} }
else if (config.Contains("ColumnTable"))
{
tableType = TableType.ColumnTable;
}
else
{
Debug.LogError("配置错误");
}
return tableType;
} }
private Dictionary<int, FieldData> GetFieldData(ExcelWorksheet worksheet) private Dictionary<int, FieldData> GetFieldData(ExcelWorksheet worksheet, ClassCodeData classCodeData)
{ {
var fieldDatas = new Dictionary<int, FieldData>(); var fieldDatas = new Dictionary<int, FieldData>();
@ -148,6 +102,16 @@ namespace Tools.ExcelResolver.Editor
}; };
fieldDatas.Add(col, fieldData); fieldDatas.Add(col, fieldData);
} }
// 判断是否有重复的varName
foreach (var fieldData in fieldDatas.Values)
{
if (fieldDatas.Values.Count(f => f.varName == fieldData.varName) > 1)
{
Debug.LogError($"'{classCodeData.className}'拥有相同的字段: {fieldData.varName}");
return null;
}
}
return fieldDatas; return fieldDatas;
} }

3
Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilCode.cs

@ -3,6 +3,7 @@ using System.CodeDom;
using System.CodeDom.Compiler; using System.CodeDom.Compiler;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using Microsoft.CSharp; using Microsoft.CSharp;
namespace Tools.ExcelResolver.Editor namespace Tools.ExcelResolver.Editor
@ -61,7 +62,7 @@ namespace Tools.ExcelResolver.Editor
switch (classCodeData.tableType) switch (classCodeData.tableType)
{ {
case TableType.SingleKeyTable: case TableType.SingleKeyTable:
FieldData keyField = classCodeData.fields[classCodeData.keyIndex[0]]; FieldData keyField = classCodeData.fields.First().Value;
CodeMemberField codeField = new CodeMemberField($"Dictionary<{keyField.typeString}, {classCodeData.className}>", "Data") CodeMemberField codeField = new CodeMemberField($"Dictionary<{keyField.typeString}, {classCodeData.className}>", "Data")
{ {
Attributes = MemberAttributes.Public, Attributes = MemberAttributes.Public,

Loading…
Cancel
Save