using System.IO; using UnityEditor; using UnityEngine; using System.Data; using GFGEditor; using OfficeOpenXml; namespace GFGEditor { public class ExcelReader { public delegate void RowCollectionHandler(ExcelWorksheet rowCollection, string configName, string configArrayName); public static void ReadExcel(RowCollectionHandler rowCollectionHandler) { string[] files = Directory.GetFiles(ExcelConfig.excelsFolderPath); int totalCount = files.Length; string strCfgArrayDispose = ""; string strCfgArrayInit = ""; for (int i = 0; i < totalCount; i++) { string filePath = files[i]; string fileName = Path.GetFileNameWithoutExtension(filePath); if (!fileName.Contains("~")) { ET.Log.Debug($"fileName {fileName}"); Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); ExcelPackage excelPackage = new ExcelPackage(stream); //IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); //DataSet result = excelReader.AsDataSet(); HandleTableCollection(excelPackage.Workbook.Worksheets, rowCollectionHandler, out string dispose, out string init); strCfgArrayDispose = strCfgArrayDispose + dispose; strCfgArrayInit = strCfgArrayInit + init; } } string functionDispose = CodeTemplateFactory.FunctionDisposeTemplate; functionDispose = functionDispose.Replace("{StrCfgArrayDispose}", strCfgArrayDispose); string disposeAllCfgsCache = CodeTemplateFactory.DisposeAllCfgsCacheTemplate; disposeAllCfgsCache = disposeAllCfgsCache.Replace("{FunctionDispose}", functionDispose); using (StreamWriter sw = new StreamWriter(ExcelConfig.handleAllCfgsCache + "DisposeAllCfgsCache.cs")) { sw.Write(disposeAllCfgsCache); } string functionInit = CodeTemplateFactory.FunctionInitTemplate; functionInit = functionInit.Replace("{StrCfgArrayInit}", strCfgArrayInit); string initAllCfgsCache = CodeTemplateFactory.InitAllCfgsCacheTemplate; initAllCfgsCache = initAllCfgsCache.Replace("{FunctionInit}", functionInit); using (StreamWriter sw = new StreamWriter(ExcelConfig.handleAllCfgsCache + "InitAllCfgsCache.cs")) { sw.Write(initAllCfgsCache); } } private static void HandleTableCollection(ExcelWorksheets Worksheets, RowCollectionHandler rowCollectionHandler, out string strDispose, out string strInit) { strDispose = ""; strInit = ""; for (int i = 1; i <= Worksheets.Count; i++) { ExcelWorksheet worksheet = Worksheets[i]; string configArrayName = HandleTable(worksheet, rowCollectionHandler); if (string.IsNullOrEmpty(configArrayName)) continue; string dispose = CodeTemplateFactory.StrCfgArrayDisposeTemplate.Replace("{configArrayName}", configArrayName); strDispose = strDispose + "\n" + dispose; string init = CodeTemplateFactory.StrCfgArrayInitTemplate.Replace("{configArrayName}", configArrayName); strInit = strInit + "\n" + init; } } private static string HandleTable(ExcelWorksheet worksheet, RowCollectionHandler rowCollectionHandler) { string[] names = worksheet.Name.Split('_'); if (names.Length < 2) { //未正确命名的表格 return ""; } if (worksheet.Name.Contains("#")) { //被注释的表格 return ""; } string configItemName = names[1]; string managerTag = ""; if (names.Length > 2) { managerTag = names[2]; } //文件名及管理器名 string configManagerName = string.Format(ExcelConfig.CONFIG_ARRAY_TEMPLATE, configItemName, managerTag); rowCollectionHandler(worksheet, configItemName, configManagerName); return configManagerName; } } }