Browse Source

获取键

master
coffee 6 months ago
parent
commit
b8f3afdbe9
  1. BIN
      Assets/ExcelResolver/Excel/hero.xlsx
  2. 102
      Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs
  3. 2
      Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs
  4. 19
      Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.cs

BIN
Assets/ExcelResolver/Excel/hero.xlsx

Binary file not shown.

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

@ -1,7 +1,9 @@
using System.IO; using System;
using System.IO;
using System.Linq; using System.Linq;
using OfficeOpenXml; using OfficeOpenXml;
using UnityEngine; using UnityEngine;
using UnityEngine.Assertions;
namespace Tools.ExcelResolver.Editor namespace Tools.ExcelResolver.Editor
{ {
@ -9,11 +11,11 @@ namespace Tools.ExcelResolver.Editor
{ {
private enum TableType private enum TableType
{ {
SingleKeyTable, // 单主键表 SingleKeyTable, // 单主键表
UnionMultiKeyTable, // 多主键表(联合索引) UnionMultiKeyTable, // 多主键表(联合索引)
MultiKeyTable, // 多主键表(独立索引) MultiKeyTable, // 多主键表(独立索引)
NotKetTable, // 无主键表 NotKetTable, // 无主键表
ColumnTable, // 纵表 ColumnTable, // 纵表
} }
@ -21,10 +23,12 @@ namespace Tools.ExcelResolver.Editor
{ {
// 获取Excel文件 // 获取Excel文件
excelResolverConfig.MakeSureDirectory(); excelResolverConfig.MakeSureDirectory();
var excelFiles = new DirectoryInfo(excelResolverConfig.ExcelPathRoot).GetFiles("*.xlsx").Where(f => !f.Name.StartsWith("~$")); var excelFiles = new DirectoryInfo(excelResolverConfig.ExcelPathRoot).GetFiles("*.xlsx")
.Where(f => !f.Name.StartsWith("~$"));
foreach (var excelFile in excelFiles) foreach (var excelFile in excelFiles)
{ {
using FileStream stream = File.Open(excelFile.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); using FileStream stream = File.Open(excelFile.FullName, FileMode.Open, FileAccess.Read,
FileShare.ReadWrite);
using ExcelPackage package = new ExcelPackage(stream); using ExcelPackage package = new ExcelPackage(stream);
ExcelWorksheet worksheet = package.Workbook.Worksheets["Sheet1"]; ExcelWorksheet worksheet = package.Workbook.Worksheets["Sheet1"];
if (null == worksheet) if (null == worksheet)
@ -32,22 +36,86 @@ namespace Tools.ExcelResolver.Editor
Debug.LogError($"Excel:{excelFile.Name} don't have Sheet1 !!"); Debug.LogError($"Excel:{excelFile.Name} don't have Sheet1 !!");
continue; continue;
} }
ExcelRange first = worksheet.Cells[1, 1];
switch (first) var type = CheckTableType(worksheet);
foreach (var i in keyIndex)
{ {
Debug.Log($"{type} {i}");
} }
} }
} }
private TableType CheckTableType(ExcelWorksheet worksheet)
{
var startColumn = worksheet.Dimension.Start.Column; // 起始列
var endColumn = worksheet.Dimension.End.Column; // 结束列
string config = worksheet.Cells[1, 1].Value.ToString();
var type = TableType.SingleKeyTable;
if (config.Contains("SingleKeyTable"))
{
type = TableType.SingleKeyTable;
var configs = config.Split("|");
Assert.IsTrue(configs.Length >= 2, "SingleKeyTable配置错误");
var key = configs[1];
var index = getKeyIndex(key);
Assert.IsTrue(index != -1, "SingleKeyTable配置错误");
keyIndex = new[] { index };
}
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;
}
return type;
private TableType CheckTableType(ExcelRange first) int getKeyIndex(string key)
{ {
string tableConfig = first.Value.ToString(); int keyIndex = -1;
for (int col = startColumn; col <= endColumn; col++)
{
return TableType.SingleKeyTable; var cellValue = worksheet.Cells[2, col].Text; // 获取第二行第 col 列的文本值
if (string.Equals(cellValue, key, StringComparison.OrdinalIgnoreCase)) // 忽略大小写比较
{
keyIndex = col;
break;
}
}
return keyIndex;
}
} }
} }
} }

2
Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs

@ -4,6 +4,8 @@ namespace Tools.ExcelResolver.Editor
{ {
public sealed partial class ExcelResolverEditorWindow public sealed partial class ExcelResolverEditorWindow
{ {
private int[] keyIndex;
private void WriteTypeCode() private void WriteTypeCode()
{ {
var code = new RootCode(); var code = new RootCode();

19
Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.cs

@ -29,16 +29,17 @@ namespace Tools.ExcelResolver.Editor
} }
} }
[OnInspectorGUI] // [OnInspectorGUI]
private void DrawGenerateButton() // private void DrawGenerateButton()
{ // {
GUILayout.FlexibleSpace(); // 把空白区域推向上方 // GUILayout.FlexibleSpace(); // 把空白区域推向上方
if (GUILayout.Button("Generate", GUILayout.Height(50))) // if (GUILayout.Button("Generate", GUILayout.Height(50)))
{ // {
Generate(); // Generate();
} // }
} // }
[Button(ButtonSizes.Gigantic)]
private void Generate() private void Generate()
{ {
// 按钮逻辑 // 按钮逻辑

Loading…
Cancel
Save