using System.Data; using System.IO; using Godot; using NPOI.XSSF.UserModel; namespace Generator; public static class ExcelGenerator { // private class ExcelTableData // { // public string[] ColumnName; // public string[] TypeName; // public string[][] Data; // } public static bool ExportExcel() { GD.Print("准备导出excel表..."); var directoryInfo = new DirectoryInfo(GameConfig.ExcelFilePath); if (directoryInfo.Exists) { var fileInfos = directoryInfo.GetFiles(); foreach (var fileInfo in fileInfos) { if (fileInfo.Extension == ".xlsx") { GD.Print("excel表: " + fileInfo.FullName); ReadExcel(fileInfo.FullName); } } } return true; } private static void ReadExcel(string excelPath) { var fileName = Path.GetFileNameWithoutExtension(excelPath).FirstToUpper(); var outStr = "namespace Config;\n\n"; outStr += $"public class {fileName} \n{{\n"; var sourceFile = excelPath; //加载表数据 var workbook = new XSSFWorkbook(sourceFile); var sheet1 = workbook.GetSheet("Sheet1"); //解析表 var rowCount = sheet1.LastRowNum; //先解析表中的列名, 注释, 类型 var columnCount = -1; var names = sheet1.GetRow(0); var descriptions = sheet1.GetRow(1); var types = sheet1.GetRow(2); foreach (var cell in names) { var value = cell.StringCellValue; if (string.IsNullOrEmpty(value)) { columnCount = cell.ColumnIndex; break; } value = value.FirstToUpper(); outStr += $" /// <summary>\n"; var descriptionCell = descriptions.GetCell(cell.ColumnIndex); var description = descriptionCell.StringCellValue.Replace("\n", " <br/>\n /// "); var type = TypeMapping(types.GetCell(cell.ColumnIndex).StringCellValue); outStr += $" /// {description}\n"; outStr += $" /// </summary>\n"; outStr += $" public {type} {value};\n\n"; } outStr += "}"; workbook.Close(); if (!Directory.Exists("src/config")) { Directory.CreateDirectory("src/config"); } File.WriteAllText("src/config/" + fileName + ".cs", outStr); } private static string TypeMapping(string typeName) { switch (typeName) { case "boolean": return "bool"; case "boolean[]": return "bool[]"; case "vector2": return "Godot.Vector2"; case "vector2[]": return "Godot.Vector2[]"; case "vector3": return "Godot.Vector3"; case "vector3[]": return "Godot.Vector3[]"; case "color[]": return "Godot.Color[]"; } return typeName; } }