コード例 #1
0
ファイル: ExporterJsonConfig.cs プロジェクト: Yurii34/Nice-ET
        private void ExportIDL(string fileName, string exportDir)
        {
            XSSFWorkbook xssfWorkbook;

            using (FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                xssfWorkbook = new XSSFWorkbook(file);
            }

            string protoName = Path.GetFileNameWithoutExtension(fileName).ToLower();

            string exportPath = Path.Combine(exportDir, $"{protoName}.fbs");

            using (FileStream txt = new FileStream(exportPath, FileMode.Create))
                using (StreamWriter sw = new StreamWriter(txt))
                {
                    StringBuilder sb    = new StringBuilder();
                    ISheet        sheet = xssfWorkbook.GetSheetAt(0);

                    sb.Append("namespace fb; \n");

                    //gen TB
                    sb.Append($"table {protoName}TB\n");
                    sb.Append("{\n");
                    sb.Append($"\t {protoName}TRS:[{protoName}TR];\n");
                    sb.Append("}\n\n"); //end TB

                    //gen TR
                    sb.Append($"table {protoName}TR\n");
                    sb.Append("{\n");

                    int cellCount = sheet.GetRow(0).LastCellNum;

                    for (int i = 0; i < cellCount; i++)
                    {
                        string fieldDesc = ExcelHelper.GetCellString(sheet, 0, i);

                        if (fieldDesc.StartsWith("#"))
                        {
                            continue;
                        }

                        string fieldName = ExcelHelper.GetCellString(sheet, 1, i).ToLower();


                        string fieldType = ExcelHelper.GetCellString(sheet, 2, i);
                        if (fieldType == "" || fieldName == "")
                        {
                            continue;
                        }
                        string idlType = Convert(fieldType);

                        //key
                        if (fieldName.Equals("_id"))
                        {
                            idlType += "(key)";
                        }

                        sb.Append($"\t {underscope_field(fieldName)}:{idlType};\n");
                    }

                    sb.Append("}\n"); //end TR

                    sb.Append($"root_type {protoName}TB;");

                    sw.Write(sb.ToString());
                }
        }
コード例 #2
0
ファイル: ExporterJsonConfig.cs プロジェクト: Yurii34/Nice-ET
        private void GenerateTSData()
        {
            foreach (string filePath in Directory.GetFiles(ExcelPath))
            {
                if (Path.GetExtension(filePath) != ".xlsx")
                {
                    continue;
                }

                if (Path.GetFileName(filePath).StartsWith("~"))
                {
                    continue;
                }

                if (ignoreFiles.Contains(Path.GetFileName(filePath)))
                {
                    continue;
                }


                string filename           = Path.GetFileNameWithoutExtension(filePath);
                string filenameUpperFirst = filename.Substring(0, 1).ToUpper() + filename.Substring(1);



                XSSFWorkbook xssfWorkbook;
                using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    xssfWorkbook = new XSSFWorkbook(file);


                    string        tsdataPath = Path.Combine(TsPath, $"{filename}.ts");
                    StringBuilder sbTR       = new StringBuilder();
                    StringBuilder sbTRProp   = new StringBuilder();
                    StringBuilder sbTRParams = new StringBuilder();
                    StringBuilder sbTRInit   = new StringBuilder();

                    StringBuilder sbTB = new StringBuilder();

                    //生成TR
                    sbTR.Append("import { Singleton } from \"../../framework/common/Singleton\";\n");
                    sbTR.Append($"export class {filenameUpperFirst}TR{{");


                    //生成TB
                    sbTB.Append($"export class {filenameUpperFirst}TB extends Singleton<{filenameUpperFirst}TB>{{ \n");
                    sbTB.Append($"\tpublic trs:Map<number, {filenameUpperFirst}TR> = new Map<number, {filenameUpperFirst}TR>();\n");
                    sbTB.Append("\tconstructor(){\n");
                    sbTB.Append("\t\tsuper();\n");

                    // for (int k = 0; k < xssfWorkbook.NumberOfSheets; ++k)
                    {
                        int    k     = 0; //只支持一个sheet
                        ISheet sheet = xssfWorkbook.GetSheetAt(k);

                        int cellCount = sheet.GetRow(0).LastCellNum;

                        CellInfo[] cellInfos = new CellInfo[cellCount];

                        for (int i = 0; i < cellCount; i++)
                        {
                            string fieldDesc = ExcelHelper.GetCellString(sheet, 0, i);
                            string fieldName = ExcelHelper.GetCellString(sheet, 1, i);
                            string fieldType = ExcelHelper.GetCellString(sheet, 2, i);
                            cellInfos[i] = new CellInfo()
                            {
                                Name = fieldName, Type = fieldType, Desc = fieldDesc
                            };

                            sbTRProp.Append($"\t public {fieldName}:{GetTSType(fieldType)} ;\n");

                            if (i == 0)
                            {
                                sbTRParams.Append($"{fieldName}:{GetTSType(fieldType)}");
                            }
                            else
                            {
                                sbTRParams.Append($", {fieldName}:{GetTSType(fieldType)}");
                            }
                            sbTRInit.Append($"\t\tthis.{fieldName} = {fieldName};\n");
                        }

                        for (int i = 3; i <= sheet.LastRowNum; ++i)
                        {
                            if (ExcelHelper.GetCellString(sheet, i, 0) == "")
                            {
                                break;;
                            }

                            IRow   row = sheet.GetRow(i);
                            string id  = ExcelHelper.GetCellString(row, 0);
                            sbTB.Append($"\t\tthis.trs.set({id}, new {filenameUpperFirst}TR(");

                            for (int j = 0; j < cellCount; ++j)
                            {
                                string fieldValue = ExcelHelper.GetCellString(row, j);
                                string fieldType  = cellInfos[j].Type;
                                if (fieldValue == null || fieldValue.Trim() == "")
                                {
                                    fieldValue = GetTSDefaultValue(fieldType);
                                }
                                fieldValue = Convert(fieldType, fieldValue);
                                if (j == 0)
                                {
                                    sbTB.Append($"{fieldValue}");
                                }
                                else
                                {
                                    sbTB.Append($", {fieldValue}");
                                }
                            }
                            sbTB.Append($"));\n");
                        }


                        using (FileStream txt = new FileStream(tsdataPath, FileMode.Create))
                            using (StreamWriter sw = new StreamWriter(txt))
                            {
                                //生成TR类
                                sw.WriteLine(sbTR.ToString());
                                sw.WriteLine(sbTRProp.ToString());
                                sw.Write("\tconstructor(");
                                sw.Write(sbTRParams.ToString());
                                sw.WriteLine("){");
                                sw.WriteLine(sbTRInit.ToString());
                                sw.WriteLine("\t}");
                                sw.WriteLine("}\n");



                                //生成TB类
                                sbTB.Append("\t }\n");
                                sbTB.Append("}\n");
                                sw.WriteLine(sbTB.ToString());
                                sw.Flush();
                            }
                    }
                }
            }
        }