Browse Source

实现列注释

master
coffee 5 months ago
parent
commit
cef8f71034
  1. BIN
      Assets/ExcelResolver/Excel/hero.xlsx
  2. 17
      Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Data/ClassCodeData.cs
  3. 104
      Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs
  4. 21
      Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOData.cs

BIN
Assets/ExcelResolver/Excel/hero.xlsx

Binary file not shown.

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

@ -4,19 +4,16 @@ namespace Tools.ExcelResolver.Editor
{ {
internal class ClassCodeData internal class ClassCodeData
{ {
public readonly TableType tableType; public TableType tableType;
public readonly string className; public string className;
public readonly Dictionary<int, FieldData> fields = new(); public Dictionary<int, FieldData> fields = new();
// public readonly FieldData[] fields; // public FieldData[] fields;
public readonly int[] keyIndex; public int[] keyIndex;
// public readonly FieldData[] keyField; // public FieldData[] keyField;
public ClassCodeData(TableType tableType, string className, Dictionary<int, FieldData> fields, int[] keyIndex) public ClassCodeData(string className)
{ {
this.tableType = tableType;
this.className = $"{char.ToUpper(className[0])}{className.Substring(1)}"; this.className = $"{char.ToUpper(className[0])}{className.Substring(1)}";
this.fields = fields;
this.keyIndex = keyIndex;
// keyField = new FieldData[keyIndex.Length]; // keyField = new FieldData[keyIndex.Length];
// for (int i = 0; i < keyIndex.Length; i++) // for (int i = 0; i < keyIndex.Length; i++)

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

@ -29,11 +29,15 @@ namespace Tools.ExcelResolver.Editor
Debug.LogError($"Excel:{excelFile.Name} don't have Sheet1 !!"); Debug.LogError($"Excel:{excelFile.Name} don't have Sheet1 !!");
continue; continue;
} }
var classCodeData = new ClassCodeData(excelFile.Name[..^5]);
var fieldDatas = GetFieldData(worksheet); var fieldDatas = GetFieldData(worksheet);
var tableType = CheckTableType(worksheet, out var keyIndex); classCodeData.fields = fieldDatas;
var tableType = CheckTableType(worksheet, classCodeData.className, out var keyIndex);
classCodeData.tableType = tableType;
classCodeData.keyIndex = keyIndex;
var classCodeData = new ClassCodeData(tableType, excelFile.Name[..^5], fieldDatas, keyIndex);
WriteDataCode(classCodeData); WriteDataCode(classCodeData);
WriteSOCode(classCodeData); WriteSOCode(classCodeData);
@ -43,7 +47,7 @@ namespace Tools.ExcelResolver.Editor
AssetDatabase.Refresh(); AssetDatabase.Refresh();
} }
private TableType CheckTableType(ExcelWorksheet worksheet, out int[] keyIndex) private TableType CheckTableType(ExcelWorksheet worksheet, string className, out int[] keyIndex)
{ {
var startColumn = worksheet.Dimension.Start.Column; // 起始列 var startColumn = worksheet.Dimension.Start.Column; // 起始列
var endColumn = worksheet.Dimension.End.Column; // 结束列 var endColumn = worksheet.Dimension.End.Column; // 结束列
@ -57,52 +61,52 @@ namespace Tools.ExcelResolver.Editor
{ {
type = TableType.SingleKeyTable; type = TableType.SingleKeyTable;
var configs = config.Split("|"); var configs = config.Split("|");
Assert.IsTrue(configs.Length >= 2, "SingleKeyTable配置错误"); Assert.IsTrue(configs.Length >= 2, $"'{className}'配置错误");
var key = configs[1]; var key = configs[1];
var index = getKeyIndex(key); var index = getKeyIndex(key);
Assert.IsTrue(index != -1, "SingleKeyTable配置错误"); Assert.IsTrue(index != -1, $"'{className}'配置错误");
keyIndex = new[] { index }; keyIndex = new[] { index };
} }
else if (config.Contains("UnionMultiKeyTable")) // else if (config.Contains("UnionMultiKeyTable"))
{ // {
type = TableType.UnionMultiKeyTable; // type = TableType.UnionMultiKeyTable;
var configs = config.Split("|"); // var configs = config.Split("|");
Assert.IsTrue(configs.Length >= 2, "UnionMultiKeyTable配置错误"); // Assert.IsTrue(configs.Length >= 2, "UnionMultiKeyTable配置错误");
var keys = configs[1].Split(","); // var keys = configs[1].Split(",");
keyIndex = new int[keys.Length]; // keyIndex = new int[keys.Length];
for (int i = 0; i < keys.Length; i++) // for (int i = 0; i < keys.Length; i++)
{ // {
var index = getKeyIndex(keys[i]); // var index = getKeyIndex(keys[i]);
Assert.IsTrue(index != -1, "UnionMultiKeyTable配置错误"); // Assert.IsTrue(index != -1, "UnionMultiKeyTable配置错误");
keyIndex[i] = index; // keyIndex[i] = index;
} // }
} // }
else if (config.Contains("MultiKeyTable")) // else if (config.Contains("MultiKeyTable"))
{ // {
type = TableType.MultiKeyTable; // type = TableType.MultiKeyTable;
var configs = config.Split("|"); // var configs = config.Split("|");
Assert.IsTrue(configs.Length >= 2, "UnionMultiKeyTable配置错误"); // Assert.IsTrue(configs.Length >= 2, "UnionMultiKeyTable配置错误");
var keys = configs[1].Split(","); // var keys = configs[1].Split(",");
keyIndex = new int[keys.Length]; // keyIndex = new int[keys.Length];
for (int i = 0; i < keys.Length; i++) // for (int i = 0; i < keys.Length; i++)
{ // {
var index = getKeyIndex(keys[i]); // var index = getKeyIndex(keys[i]);
Assert.IsTrue(index != -1, "UnionMultiKeyTable配置错误"); // Assert.IsTrue(index != -1, "UnionMultiKeyTable配置错误");
keyIndex[i] = index; // keyIndex[i] = index;
} // }
} // }
else if (config.Contains("NotKetTable")) // else if (config.Contains("NotKetTable"))
{ // {
type = TableType.NotKetTable; // type = TableType.NotKetTable;
} // }
else if (config.Contains("ColumnTable")) // else if (config.Contains("ColumnTable"))
{ // {
type = TableType.ColumnTable; // type = TableType.ColumnTable;
} // }
else // else
{ // {
Debug.LogError("配置错误"); // Debug.LogError("配置错误");
} // }
return type; return type;
@ -126,16 +130,16 @@ namespace Tools.ExcelResolver.Editor
private Dictionary<int, FieldData> GetFieldData(ExcelWorksheet worksheet) private Dictionary<int, FieldData> GetFieldData(ExcelWorksheet worksheet)
{ {
var fieldDatas = new Dictionary<int, FieldData>(); var fieldDatas = new Dictionary<int, FieldData>();
var endColumn = worksheet.Dimension.End.Column;
for (int col = 2; col <= endColumn; col++) for (int col = 2; col <= worksheet.Dimension.End.Column; col++)
{ {
if (string.IsNullOrEmpty(worksheet.Cells[2, col].Text)) continue; var cellText = worksheet.Cells[2, col].Text;
if (string.IsNullOrEmpty(cellText) || cellText == "##") continue;
FieldData fieldData = new FieldData FieldData fieldData = new FieldData
{ {
colIndex = col, colIndex = col,
varName = worksheet.Cells[2, col].Text, varName = cellText,
typeString = worksheet.Cells[3, col].Text, typeString = worksheet.Cells[3, col].Text,
type = ExcelResolverUtil.GetTTypeByString(worksheet.Cells[3, col].Text), type = ExcelResolverUtil.GetTTypeByString(worksheet.Cells[3, col].Text),
info = worksheet.Cells[4, col].Text, info = worksheet.Cells[4, col].Text,

21
Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOData.cs

@ -19,10 +19,10 @@ namespace Tools.ExcelResolver.Editor
ReadExcel(); ReadExcel();
} }
foreach (var pair in classCodeDataDict) foreach (var classCodeDataDictPair in classCodeDataDict)
{ {
var worksheet = pair.Key; var worksheet = classCodeDataDictPair.Key;
var classCodeData = pair.Value; var classCodeData = classCodeDataDictPair.Value;
Type soType = ExcelResolverUtil.GetOrCacheTypeByName(classCodeData.className); Type soType = ExcelResolverUtil.GetOrCacheTypeByName(classCodeData.className);
@ -52,15 +52,18 @@ namespace Tools.ExcelResolver.Editor
if (worksheet.Cells[row, 1].Text == "##") continue; if (worksheet.Cells[row, 1].Text == "##") continue;
ScriptableObject instance = ScriptableObject.CreateInstance(soType); ScriptableObject instance = ScriptableObject.CreateInstance(soType);
for (int col = 2; col <= classCodeData.fields.Keys.Max(); col++) foreach (var pair in classCodeData.fields)
{ {
var col = pair.Key;
var fieldData = pair.Value;
var cell = worksheet.Cells[row, col]; var cell = worksheet.Cells[row, col];
if (string.IsNullOrEmpty(cell.Text)) continue; if (string.IsNullOrEmpty(cell.Text)) continue;
object convertedValue = ExcelResolverUtil.ConvertCellValue(cell, classCodeData.fields[col].type, classCodeData.className); object convertedValue = ExcelResolverUtil.ConvertCellValue(cell, fieldData.type, classCodeData.className);
FieldInfo fieldInfo = soType.GetField(classCodeData.fields[col].varName); FieldInfo fieldInfo = soType.GetField(fieldData.varName);
if (fieldInfo == null) throw new Exception($"目标类中不存在字段:{classCodeData.fields[col].varName}"); if (fieldInfo == null) throw new Exception($"目标类中不存在字段:{fieldData.varName}");
fieldInfo.SetValue(instance, convertedValue); fieldInfo.SetValue(instance, convertedValue);
} }
AssetDatabase.CreateAsset(instance, $"{excelResolverConfig.SOPathRoot}/{classCodeData.className}_{row - 6}.asset"); AssetDatabase.CreateAsset(instance, $"{excelResolverConfig.SOPathRoot}/{classCodeData.className}_{row - 6}.asset");

Loading…
Cancel
Save