|
|
|
@ -1,48 +1,58 @@
|
|
|
|
|
using System; |
|
|
|
|
using System.IO; |
|
|
|
|
using System.Collections.Generic; |
|
|
|
|
using System.Linq; |
|
|
|
|
using OfficeOpenXml; |
|
|
|
|
using UnityEditor; |
|
|
|
|
using UnityEngine; |
|
|
|
|
|
|
|
|
|
namespace Tools.ExcelResolver.Editor |
|
|
|
|
{ |
|
|
|
|
public sealed partial class ExcelResolverEditorWindow |
|
|
|
|
{ |
|
|
|
|
private void WriteSOData(ExcelWorksheet worksheet, ClassCodeData classCodeData) |
|
|
|
|
private Dictionary<ExcelWorksheet, ClassCodeData> classCodeDataDict; |
|
|
|
|
|
|
|
|
|
private void WriteSOData() |
|
|
|
|
{ |
|
|
|
|
Type soType = ExcelResolverUtil.GetOrCacheTypeByName(classCodeData.className); |
|
|
|
|
|
|
|
|
|
if (soType == null) |
|
|
|
|
foreach (var data in classCodeDataDict) |
|
|
|
|
{ |
|
|
|
|
Debug.LogError($"Class '{classCodeData.className}SO' not found. Please generate classes first (or check namespace)."); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
var worksheet = data.Key; |
|
|
|
|
var classCodeData = data.Value; |
|
|
|
|
|
|
|
|
|
Type soType = ExcelResolverUtil.GetOrCacheTypeByName(classCodeData.className); |
|
|
|
|
|
|
|
|
|
// string fullPath = $"{excelResolverConfig.SOPathRoot}/{classCodeData.className}SO.asset"; |
|
|
|
|
// |
|
|
|
|
// if (File.Exists(fullPath)) |
|
|
|
|
// { |
|
|
|
|
// Debug.Log("已存在SO文件,无需创建"); |
|
|
|
|
// |
|
|
|
|
// } |
|
|
|
|
// else |
|
|
|
|
// { |
|
|
|
|
// instance = ScriptableObject.CreateInstance(soType); |
|
|
|
|
// AssetDatabase.CreateAsset(instance, $"{excelResolverConfig.SOPathRoot}/{classCodeData.className}SO.asset"); |
|
|
|
|
// AssetDatabase.SaveAssets(); |
|
|
|
|
// } |
|
|
|
|
if (soType == null) |
|
|
|
|
{ |
|
|
|
|
Debug.LogError($"Class '{classCodeData.className}SO' not found. Please generate classes first (or check namespace)."); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (int row = 7; row < worksheet.Dimension.End.Row; row++) |
|
|
|
|
{ |
|
|
|
|
// 跳过注释行 |
|
|
|
|
if (worksheet.Cells[row, 1].Text == "##") continue; |
|
|
|
|
|
|
|
|
|
ScriptableObject instance = ScriptableObject.CreateInstance(soType); |
|
|
|
|
// string fullPath = $"{excelResolverConfig.SOPathRoot}/{classCodeData.className}SO.asset"; |
|
|
|
|
// |
|
|
|
|
// if (File.Exists(fullPath)) |
|
|
|
|
// { |
|
|
|
|
// Debug.Log("已存在SO文件,无需创建"); |
|
|
|
|
// |
|
|
|
|
// } |
|
|
|
|
// else |
|
|
|
|
// { |
|
|
|
|
// instance = ScriptableObject.CreateInstance(soType); |
|
|
|
|
// AssetDatabase.CreateAsset(instance, $"{excelResolverConfig.SOPathRoot}/{classCodeData.className}SO.asset"); |
|
|
|
|
// AssetDatabase.SaveAssets(); |
|
|
|
|
// } |
|
|
|
|
|
|
|
|
|
for (int col = 2; col < worksheet.Dimension.End.Column; col++) |
|
|
|
|
for (int row = 7; row <= worksheet.Dimension.End.Row; row++) |
|
|
|
|
{ |
|
|
|
|
var cell = worksheet.Cells[row, col]; |
|
|
|
|
// object convertedValue = ExcelResolverUtil.ConvertCellValue(cell, classCodeData.fields[col], classCodeData.fieldNames[col - 2], classCodeData.className); |
|
|
|
|
// 跳过注释行 |
|
|
|
|
if (worksheet.Cells[row, 1].Text == "##") continue; |
|
|
|
|
|
|
|
|
|
ScriptableObject instance = ScriptableObject.CreateInstance(soType); |
|
|
|
|
|
|
|
|
|
for (int col = 2; col < classCodeData.fields.Keys.Max(); col++) |
|
|
|
|
{ |
|
|
|
|
var cell = worksheet.Cells[row, col]; |
|
|
|
|
if (string.IsNullOrEmpty(cell.Text)) continue; |
|
|
|
|
|
|
|
|
|
object convertedValue = ExcelResolverUtil.ConvertCellValue(cell, classCodeData.fields[col].type, classCodeData.className); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|