ExcelReader.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using System.IO;
  2. using UnityEditor;
  3. using UnityEngine;
  4. using System.Data;
  5. using GFGEditor;
  6. using OfficeOpenXml;
  7. namespace GFGEditor
  8. {
  9. public class ExcelReader
  10. {
  11. public delegate void RowCollectionHandler(ExcelWorksheet rowCollection, string configName, string configArrayName);
  12. public static void ReadExcel(RowCollectionHandler rowCollectionHandler)
  13. {
  14. string[] files = Directory.GetFiles(ExcelConfig.excelsFolderPath);
  15. int totalCount = files.Length;
  16. string strCfgArrayDispose = "";
  17. string strCfgArrayInit = "";
  18. for (int i = 0; i < totalCount; i++)
  19. {
  20. string filePath = files[i];
  21. string fileName = Path.GetFileNameWithoutExtension(filePath);
  22. if (!fileName.Contains("~"))
  23. {
  24. ET.Log.Debug($"fileName {fileName}");
  25. Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
  26. ExcelPackage excelPackage = new ExcelPackage(stream);
  27. //IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
  28. //DataSet result = excelReader.AsDataSet();
  29. HandleTableCollection(excelPackage.Workbook.Worksheets, rowCollectionHandler, out string dispose, out string init);
  30. strCfgArrayDispose = strCfgArrayDispose + dispose;
  31. strCfgArrayInit = strCfgArrayInit + init;
  32. }
  33. }
  34. string functionDispose = CodeTemplateFactory.FunctionDisposeTemplate;
  35. functionDispose = functionDispose.Replace("{StrCfgArrayDispose}", strCfgArrayDispose);
  36. string disposeAllCfgsCache = CodeTemplateFactory.DisposeAllCfgsCacheTemplate;
  37. disposeAllCfgsCache = disposeAllCfgsCache.Replace("{FunctionDispose}", functionDispose);
  38. using (StreamWriter sw = new StreamWriter(ExcelConfig.handleAllCfgsCache + "DisposeAllCfgsCache.cs"))
  39. {
  40. sw.Write(disposeAllCfgsCache);
  41. }
  42. string functionInit = CodeTemplateFactory.FunctionInitTemplate;
  43. functionInit = functionInit.Replace("{StrCfgArrayInit}", strCfgArrayInit);
  44. string initAllCfgsCache = CodeTemplateFactory.InitAllCfgsCacheTemplate;
  45. initAllCfgsCache = initAllCfgsCache.Replace("{FunctionInit}", functionInit);
  46. using (StreamWriter sw = new StreamWriter(ExcelConfig.handleAllCfgsCache + "InitAllCfgsCache.cs"))
  47. {
  48. sw.Write(initAllCfgsCache);
  49. }
  50. }
  51. private static void HandleTableCollection(ExcelWorksheets Worksheets, RowCollectionHandler rowCollectionHandler, out string strDispose, out string strInit)
  52. {
  53. strDispose = "";
  54. strInit = "";
  55. for (int i = 1; i <= Worksheets.Count; i++)
  56. {
  57. ExcelWorksheet worksheet = Worksheets[i];
  58. string configArrayName = HandleTable(worksheet, rowCollectionHandler);
  59. if (string.IsNullOrEmpty(configArrayName)) continue;
  60. string dispose = CodeTemplateFactory.StrCfgArrayDisposeTemplate.Replace("{configArrayName}", configArrayName);
  61. strDispose = strDispose + "\n" + dispose;
  62. string init = CodeTemplateFactory.StrCfgArrayInitTemplate.Replace("{configArrayName}", configArrayName);
  63. strInit = strInit + "\n" + init;
  64. }
  65. }
  66. private static string HandleTable(ExcelWorksheet worksheet, RowCollectionHandler rowCollectionHandler)
  67. {
  68. string[] names = worksheet.Name.Split('_');
  69. if (names.Length < 2)
  70. {
  71. //未正确命名的表格
  72. return "";
  73. }
  74. if (worksheet.Name.Contains("#"))
  75. {
  76. //被注释的表格
  77. return "";
  78. }
  79. string configItemName = names[1];
  80. string managerTag = "";
  81. if (names.Length > 2)
  82. {
  83. managerTag = names[2];
  84. }
  85. //文件名及管理器名
  86. string configManagerName = string.Format(ExcelConfig.CONFIG_ARRAY_TEMPLATE, configItemName, managerTag);
  87. rowCollectionHandler(worksheet, configItemName, configManagerName);
  88. return configManagerName;
  89. }
  90. }
  91. }