private void ReadAllExcel()
 {
     if (ExcelList == null)
     {
         ExcelList = new List <ExcelDataForEditor>();
     }
     else
     {
         ExcelList.Clear();
     }
     string[] excels = FileHelper.GetFiles(FlatBufferToolConfigure.Configure.ExcelDir, ExcelExts);
     foreach (string excelFilePath in excels)
     {
         List <ExcelSheetData> excelSheetDatas = new List <ExcelSheetData>();
         TableFileGenerater.ReadExcel(excelFilePath, ref excelSheetDatas);
         ExcelDataForEditor excel = new ExcelDataForEditor
         {
             ExcelPath = excelFilePath
         };
         foreach (var exd in excelSheetDatas)
         {
             excel.ExcelSheetDatas.Add(new ExcelSheetForEditor()
             {
                 SheetData = exd,
                 FoldOpen  = false,
                 FbsObject = TableFileGenerater.GenFbsFileObject(exd)
             });
         }
         ExcelList.Add(excel);
     }
 }
    public static void BuildAllFromExcel(string flatcPath, string excelFilePath, string outSchemaPath, string outJsonPath, string outClassPath, string outBinPath)
    {
        List <ExcelSheetData> excelSheetDatas = new List <ExcelSheetData>();

        ReadExcel(excelFilePath, ref excelSheetDatas);

        foreach (var sheet in excelSheetDatas)
        {
            FbsFile fbsFile    = GenFbsFileObject(sheet);
            string  schemaPath = string.Empty;
            string  jsonPath   = string.Empty;
            TableFileGenerater.GenFbsSchemaFile(fbsFile, outSchemaPath, ref schemaPath);

            TableFileGenerater.GenJsonFile(fbsFile, sheet.fieldValues, outJsonPath, ref jsonPath);

            if (!Directory.Exists(outClassPath))
            {
                Directory.CreateDirectory(outClassPath);
            }
            if (!Directory.Exists(outBinPath))
            {
                Directory.CreateDirectory(outBinPath);
            }
            CmdHelper.RunFlatC(flatcPath, schemaPath, jsonPath, outClassPath, outBinPath);
        }
    }
    private void BuildSheet(ExcelSheetData sheet)
    {
        string outSchemaPath = FlatBufferToolConfigure.Configure.SchemaDir;
        string outJsonPath   = FlatBufferToolConfigure.Configure.JsonDir;
        string outClassPath  = FlatBufferToolConfigure.Configure.ClassDir;
        string outBinPath    = FlatBufferToolConfigure.Configure.BinDir;

        TableFileGenerater.BuildSheet(sheet, FlatBufferToolConfigure.Configure.FlactcPath, outSchemaPath, outJsonPath, outClassPath, outBinPath);
    }
    private void BuildAll()
    {
        string[] excels        = FileHelper.GetFiles(FlatBufferToolConfigure.Configure.ExcelDir, ExcelExts);
        string   outSchemaPath = FlatBufferToolConfigure.Configure.SchemaDir;
        string   outJsonPath   = FlatBufferToolConfigure.Configure.JsonDir;
        string   outClassPath  = FlatBufferToolConfigure.Configure.ClassDir;
        string   outBinPath    = FlatBufferToolConfigure.Configure.BinDir;

        foreach (string excelFilePath in excels)
        {
            TableFileGenerater.BuildAllFromExcel(FlatBufferToolConfigure.Configure.FlactcPath, excelFilePath, outSchemaPath, outJsonPath, outClassPath, outBinPath);
        }
    }
    public static void BuildSheet(ExcelSheetData sheet, string flatcPath, string outSchemaPath, string outJsonPath, string outClassPath, string outBinPath)
    {
        FbsFile fbsFile    = GenFbsFileObject(sheet);
        string  schemaPath = string.Empty;
        string  jsonPath   = string.Empty;

        TableFileGenerater.GenFbsSchemaFile(fbsFile, outSchemaPath, ref schemaPath);

        TableFileGenerater.GenJsonFile(fbsFile, sheet.fieldValues, outJsonPath, ref jsonPath);

        if (!Directory.Exists(outClassPath))
        {
            Directory.CreateDirectory(outClassPath);
        }
        if (!Directory.Exists(outBinPath))
        {
            Directory.CreateDirectory(outBinPath);
        }
        CmdHelper.RunFlatC(flatcPath, schemaPath, jsonPath, outClassPath, outBinPath);
    }
    public static FbsFile GenFbsFileObject(ExcelSheetData excelSheetData)
    {
        //一个sheet 一个table
        FbsFile fbsFile = new FbsFile
        {
            fileName = excelSheetData.sheetName.Replace("=", "")
        };
        FbsTable fbsTable = new FbsTable
        {
            tableName = fbsFile.fileName
        };

        //处理table字段
        for (int j = 0; j < excelSheetData.fieldNames.Count; j++)
        {
            FbsTableField fbsTableField = new FbsTableField();
            fbsTableField.fieldName = excelSheetData.fieldNames[j];
            string dataTypeStr = excelSheetData.fieldTypes[j];
            TableFileGenerater.GetFbsDataTypeByString(dataTypeStr, ref fbsTableField.fieldType, ref fbsTableField.fieldTypeName, ref fbsTableField.dataType, ref fbsTableField.isArray);
            fbsTable.fields.Add(fbsTableField);
        }
        fbsFile.tables.Add(fbsTable);
        //添加root_type table
        FbsTable fbsRootTable = new FbsTable();

        fbsRootTable.tableName = "Root_" + fbsFile.fileName;
        FbsTableField dataField = new FbsTableField();

        dataField.fieldName     = "data";
        dataField.fieldType     = FbsFieldType.TABLE;
        dataField.isArray       = true;
        dataField.fieldTypeName = fbsTable.tableName;
        fbsRootTable.fields.Add(dataField);
        fbsFile.tables.Add(fbsRootTable);
        //root_type
        fbsFile.root_type     = fbsRootTable.tableName;
        fbsFile.namespaceName = "GameDataTables";
        return(fbsFile);
    }
    private void OnGUI()
    {
        EditorGUILayout.BeginVertical();
        EditorGUILayout.LabelField("Setting");
        GUIHelper.DrawFilePick("FlatcPath:", ref FlatBufferToolConfigure.Configure.FlactcPath);
        EditorGUILayout.Separator();
        GUIHelper.DrawFolderPick("ExcelDir:", ref FlatBufferToolConfigure.Configure.ExcelDir);
        EditorGUILayout.Separator();
        GUIHelper.DrawFolderPick("SchemaDir:", ref FlatBufferToolConfigure.Configure.SchemaDir);
        EditorGUILayout.Separator();
        GUIHelper.DrawFolderPick("JsonDir:", ref FlatBufferToolConfigure.Configure.JsonDir);
        EditorGUILayout.Separator();
        GUIHelper.DrawFolderPick("ClassDir:", ref FlatBufferToolConfigure.Configure.ClassDir);
        EditorGUILayout.Separator();
        GUIHelper.DrawFolderPick("BinDir", ref FlatBufferToolConfigure.Configure.BinDir);
        EditorGUILayout.Separator();
        EditorGUILayout.Separator();

        GUIHelper.DrawIntField("Excel读取字段名行号:", ref FlatBufferToolConfigure.Configure.fieldNameRow, 150);
        EditorGUILayout.Separator();
        GUIHelper.DrawIntField("Excel读取字段类型行号:", ref FlatBufferToolConfigure.Configure.fieldTypeRow, 150);
        EditorGUILayout.Separator();
        GUIHelper.DrawIntField("Excel读取字段数值开始行号:", ref FlatBufferToolConfigure.Configure.fieldValueRow, 150);

        if (GUILayout.Button("保存配置"))
        {
            FlatBufferToolConfigure.Save();
        }

        EditorGUILayout.Separator();
        EditorGUILayout.Separator();
        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("重新读取Excel", GUILayout.MaxWidth(100)))
        {
            ReadAllExcel();
        }
        if (GUILayout.Button("生成所有表格数据", GUILayout.MaxWidth(150)))
        {
            BuildAll();
        }
        if (GUILayout.Button("检查表格格式", GUILayout.MaxWidth(100)))
        {
            CheckExcelPattern();
        }
        string btnShowFilter = "显示Excel列表";
        Color  preColor      = GUI.color;

        GUI.color = ShowExcelInfo ? Color.white : Color.gray;
        if (GUILayout.Button(btnShowFilter, GUILayout.MaxWidth(100)))
        {
            ShowExcelInfo = !ShowExcelInfo;
        }
        GUI.color = preColor;

        EditorGUILayout.EndHorizontal();

        EditorGUILayout.Separator();
        if (ShowExcelInfo)
        {
            scrollViewPos = GUILayout.BeginScrollView(scrollViewPos);
            if (ExcelList == null)
            {
                ReadAllExcel();
            }
            foreach (var excel in ExcelList)
            {
                GUIStyle style = !excel.FoldOpen ? GUIHelper.GetStyle(GUIStyleEnum.FOLDOUTNORMAL) : GUIHelper.GetStyle(GUIStyleEnum.FOLDOUTDIM);
                excel.FoldOpen = EditorGUILayout.Foldout(excel.FoldOpen, excel.ExcelPath, true, style);
                if (excel.FoldOpen)
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.Label("", GUILayout.Width(15));
                    GUILayout.BeginVertical();
                    foreach (var sheet in excel.ExcelSheetDatas)
                    {
                        GUIStyle sheetstyle = !sheet.FoldOpen ? GUIHelper.GetStyle(GUIStyleEnum.FOLDOUTNORMAL) : GUIHelper.GetStyle(GUIStyleEnum.FOLDOUTDIM);
                        sheet.FoldOpen = EditorGUILayout.Foldout(sheet.FoldOpen, sheet.SheetData.sheetName, true, sheetstyle);
                        if (sheet.FoldOpen)
                        {
                            GUILayout.BeginHorizontal();
                            GUILayout.Label("", GUILayout.Width(15));
                            GUILayout.BeginVertical();
                            GUILayout.BeginHorizontal();
                            if (GUILayout.Button("导出", GUILayout.Width(100)))
                            {
                                BuildSheet(sheet.SheetData);
                            }
                            GUILayout.EndHorizontal();
                            int      fieldCount = sheet.SheetData.fieldNames.Count;
                            FbsTable fbsTable   = TableFileGenerater.GetFbsRootTableDataTypeObj(sheet.FbsObject);
                            if (fbsTable == null)
                            {
                                Debug.LogError("FbsTable is Null!");
                                return;
                            }
                            GUILayout.BeginHorizontal(GUIHelper.GetStyle(GUIStyleEnum.BLACKSTYLE));
                            for (int findex = 0; findex < fieldCount; findex++)
                            {
                                float itemWidth = sheet.SheetData.fieldMaxSize[findex] * GUIHelper.FontSize;
                                GUILayout.Label(sheet.SheetData.fieldNames[findex], GUIHelper.GetStyle(GUIStyleEnum.MIDDLETITLE), GUILayout.Width(itemWidth));
                            }
                            GUILayout.EndHorizontal();

                            GUILayout.BeginHorizontal(GUIHelper.GetStyle(GUIStyleEnum.BLACKSTYLE));

                            for (int findex = 0; findex < fieldCount; findex++)
                            {
                                float  itemWidth = sheet.SheetData.fieldMaxSize[findex] * GUIHelper.FontSize;
                                string typename  = TableFileGenerater.GetTableFieldTypeString(fbsTable.fields[findex]);
                                GUILayout.Label(typename, GUIHelper.GetStyle(GUIStyleEnum.MIDDLETITLE), GUILayout.Width(itemWidth));
                            }
                            GUILayout.EndHorizontal();

                            for (int vindex = 0; vindex < sheet.SheetData.fieldValues.Count; vindex++)
                            {
                                int dataIndex = Mathf.FloorToInt(vindex % fieldCount);
                                if (dataIndex == 0)
                                {
                                    GUILayout.BeginHorizontal();
                                }
                                float itemWidth = sheet.SheetData.fieldMaxSize[dataIndex] * GUIHelper.FontSize;
                                GUILayout.TextArea(sheet.SheetData.fieldValues[vindex], GUIHelper.GetStyle(GUIStyleEnum.MIDDLETITLE), GUILayout.Width(itemWidth));
                                if (dataIndex == fieldCount - 1)
                                {
                                    GUILayout.EndHorizontal();
                                }
                            }

                            GUILayout.EndHorizontal();
                            GUILayout.EndVertical();
                        }
                    }
                    GUILayout.EndVertical();
                    GUILayout.EndHorizontal();
                }
            }

            GUILayout.EndScrollView();
        }

        GUILayout.EndVertical();
    }