|
|
|
@ -2,6 +2,7 @@
|
|
|
|
|
using System.Collections.Generic; |
|
|
|
|
using System.IO; |
|
|
|
|
using System.Linq; |
|
|
|
|
using System.Security.Cryptography; |
|
|
|
|
using OfficeOpenXml; |
|
|
|
|
using UnityEditor; |
|
|
|
|
using UnityEditor.Compilation; |
|
|
|
@ -12,16 +13,32 @@ namespace Tools.ExcelResolver.Editor
|
|
|
|
|
{ |
|
|
|
|
public sealed partial class ExcelResolverEditorWindow |
|
|
|
|
{ |
|
|
|
|
private void ReadExcel(bool needWrite = true) |
|
|
|
|
private void ReadExcel() |
|
|
|
|
{ |
|
|
|
|
classCodeDataDict = new Dictionary<ExcelWorksheet, ClassCodeData>(); |
|
|
|
|
|
|
|
|
|
// 获取Excel文件 |
|
|
|
|
excelResolverConfig.MakeSureDirectory(); |
|
|
|
|
var excelFiles = new DirectoryInfo(excelResolverConfig.ExcelPathRoot).GetFiles("*.xlsx").Where(f => !f.Name.StartsWith("~$")); |
|
|
|
|
if (excelFiles.Count() == 0) |
|
|
|
|
{ |
|
|
|
|
Debug.LogError("未检测到Excel文件,请检查路径"); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foreach (var excelFile in excelFiles) |
|
|
|
|
{ |
|
|
|
|
using FileStream stream = File.Open(excelFile.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); |
|
|
|
|
using MD5 md5 = MD5.Create(); |
|
|
|
|
byte[] hash = md5.ComputeHash(stream);// 转换为十六进制字符串 |
|
|
|
|
var m = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant(); |
|
|
|
|
if (excelResolverConfig.md5Dict.GetValueOrDefault(excelFile.FullName) == m) |
|
|
|
|
{ |
|
|
|
|
Debug.Log($"'{excelFile.Name}' 文件未发生变化,跳过"); |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
excelResolverConfig.md5Dict[excelFile.FullName] = m; |
|
|
|
|
|
|
|
|
|
using ExcelPackage package = new ExcelPackage(stream); |
|
|
|
|
ExcelWorksheet worksheet = package.Workbook.Worksheets["Sheet1"]; |
|
|
|
|
if (null == worksheet) |
|
|
|
@ -35,22 +52,27 @@ namespace Tools.ExcelResolver.Editor
|
|
|
|
|
classCodeData.fields = GetFieldData(worksheet, classCodeData); |
|
|
|
|
classCodeData.tableType = CheckTableType(worksheet, classCodeData); |
|
|
|
|
|
|
|
|
|
if (needWrite) |
|
|
|
|
{ |
|
|
|
|
WriteDataCode(classCodeData); |
|
|
|
|
WriteSOCode(classCodeData); |
|
|
|
|
} |
|
|
|
|
WriteDataCode(classCodeData); |
|
|
|
|
WriteSOCode(classCodeData); |
|
|
|
|
classCodeDataDict.Add(worksheet, classCodeData); |
|
|
|
|
// WriteSOData(worksheet, classCodeData); |
|
|
|
|
Debug.Log($"读取Excel文件:'{excelFile.Name}',并生成代码"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (classCodeDataDict.Count == 0) |
|
|
|
|
{ |
|
|
|
|
Debug.LogError("未检测到Excel文件改动,如需重新生成,请清空md5Dict"); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
AssetDatabase.Refresh(); |
|
|
|
|
if (EditorApplication.isCompiling) |
|
|
|
|
{ |
|
|
|
|
Debug.Log("代码成功生成,请等待编译..."); |
|
|
|
|
CompilationPipeline.compilationFinished += CompilationFinished; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
Debug.Log("未更改过字段,开始写入SO数据"); |
|
|
|
|
WriteSOData(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|