Esempio n. 1
0
 public static void ReadLangData()
 {
     if (IsLang)
     {
         GetParamValue();
         string errorString = null;
         LangData = TxtConfigReader.ParseTxtConfigFile(LangPath, ":", out errorString);
         if (!string.IsNullOrEmpty(errorString))
         {
             AppLog.LogErrorAndExit(errorString);
         }
     }
 }
Esempio n. 2
0
 /// <summary>
 /// 将翻译后的字典读取文件中
 /// </summary>
 public static void GetLanguageDictData()
 {
     if (ExcelFolder.TheLanguage != "")
     {
         string errorString        = null;
         string MoreLanguagePath   = FileModule.CombinePath(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "Language");;
         string TheLanguageDicPath = FileModule.CombinePath(MoreLanguagePath, "Language" + ExcelFolder.TheLanguage);
         string TheLanguageDicFile = FileModule.CombinePath(TheLanguageDicPath, ExcelFolder.TheLanguage + "_dict.txt");
         if (!File.Exists(TheLanguageDicFile))
         {
             return;
         }
         LanguageDictData = TxtConfigReader.ParseTxtConfigFile(TheLanguageDicFile, "\t", out errorString);
         if (!string.IsNullOrEmpty(errorString))
         {
             AppLog.LogErrorAndExit(errorString);
         }
     }
 }
Esempio n. 3
0
        public MainForm()
        {
            InitializeComponent();

            tbFormat.Text = "tableString[在这里填写格式定义]";

            // 导入lang文件内容
            if (File.Exists("lang.txt"))
            {
                string errorString = null;
                AppValues.LangData = TxtConfigReader.ParseTxtConfigFile("lang.txt", ":", out errorString);
                if (!string.IsNullOrEmpty(errorString))
                {
                    errorString = "lang.txt文件中存在错误,请修正后重新运行,程序被迫退出" + System.Environment.NewLine + errorString;
                    MessageBox.Show(errorString, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    Environment.Exit(0);
                }
            }
            else
            {
                MessageBox.Show("未找到本程序所在目录下的lang.txt文件,将无法使用lang数据类型", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
Esempio n. 4
0
    public static void ReadConfig()
    {
        GetParamValue();
        if (File.Exists(AppConfig.ConfigPath))
        {
            string errorString = null;
            AppValues.ConfigData = TxtConfigReader.ParseTxtConfigFile(AppConfig.ConfigPath, ":", out errorString);
            if (!string.IsNullOrEmpty(errorString))
            {
                AppLog.LogErrorAndExit(errorString);
            }
        }
        else
        {
            AppLog.LogWarning(string.Format("警告:找不到本工具所在路径下的{0}配置文件,请确定是否真的不需要自定义配置", AppConfig.ConfigPath));
        }

        //检查datetime类型,并初始化
        // 读取部分配置项并进行检查
        const string  ERROR_STRING_FORMAT = "配置项\"{0}\"所设置的值\"{1}\"非法:{2}\n";
        StringBuilder errorStringBuilder  = new StringBuilder();
        string        tempErrorString     = null;

        if (AppValues.ConfigData.ContainsKey(DateTimeValue.APP_CONFIG_KEY_DEFAULT_DATE_INPUT_FORMAT))
        {
            DateTimeValue.DefaultDateInputFormat = AppValues.ConfigData[DateTimeValue.APP_CONFIG_KEY_DEFAULT_DATE_INPUT_FORMAT].Trim();
            if (TableCheckHelper.CheckDateInputDefine(DateTimeValue.DefaultDateInputFormat, out tempErrorString) == false)
            {
                errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, DateTimeValue.APP_CONFIG_KEY_DEFAULT_DATE_INPUT_FORMAT, DateTimeValue.DefaultDateInputFormat, tempErrorString);
            }
        }
        if (AppValues.ConfigData.ContainsKey(DateTimeValue.APP_CONFIG_KEY_DEFAULT_TIME_INPUT_FORMAT))
        {
            DateTimeValue.DefaultTimeInputFormat = AppValues.ConfigData[DateTimeValue.APP_CONFIG_KEY_DEFAULT_TIME_INPUT_FORMAT].Trim();
            if (TableCheckHelper.CheckTimeDefine(DateTimeValue.DefaultTimeInputFormat, out tempErrorString) == false)
            {
                errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, DateTimeValue.APP_CONFIG_KEY_DEFAULT_TIME_INPUT_FORMAT, DateTimeValue.DefaultTimeInputFormat, tempErrorString);
            }
        }


        //if (AppValues.ConfigData.ContainsKey(DateTimeValue.APP_CONFIG_KEY_DEFAULT_DATE_INPUT_FORMAT))
        //{
        //    DateTimeValue.DefaultDateInputFormat = AppValues.ConfigData[DateTimeValue.APP_CONFIG_KEY_DEFAULT_DATE_INPUT_FORMAT].Trim();
        //    if (TableCheckHelper.CheckDateInputDefine(DateTimeValue.DefaultDateInputFormat, out tempErrorString) == false)
        //        errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, DateTimeValue.APP_CONFIG_KEY_DEFAULT_DATE_INPUT_FORMAT, DateTimeValue.DefaultDateInputFormat, tempErrorString);
        //}
        //if (AppValues.ConfigData.ContainsKey(LuaStruct.DefaultDateToExportFormatKey))
        //{
        //    LuaStruct.DefaultDateToExportFormat = AppValues.ConfigData[LuaStruct.DefaultDateToExportFormatKey].Trim();
        //    if (TableCheckHelper.CheckDateToLuaDefine(LuaStruct.DefaultDateToExportFormat, out tempErrorString) == false)
        //        errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, LuaStruct.DefaultDateToExportFormatKey, LuaStruct.DefaultDateToExportFormat, tempErrorString);
        //}
        //if (AppValues.ConfigData.ContainsKey(MySQLStruct.DefaultDateToExportFormatKey))
        //{
        //    MySQLStruct.DefaultDateToExportFormat = AppValues.ConfigData[MySQLStruct.DefaultDateToExportFormatKey].Trim();
        //    if (TableCheckHelper.CheckDateToDatabaseDefine(MySQLStruct.DefaultDateToExportFormat, out tempErrorString) == false)
        //        errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, MySQLStruct.DefaultDateToExportFormatKey, MySQLStruct.DefaultDateToExportFormat, tempErrorString);
        //}
        //if (AppValues.ConfigData.ContainsKey(DateTimeValue.APP_CONFIG_KEY_DEFAULT_TIME_INPUT_FORMAT))
        //{
        //    DateTimeValue.DefaultTimeInputFormat = AppValues.ConfigData[DateTimeValue.APP_CONFIG_KEY_DEFAULT_TIME_INPUT_FORMAT].Trim();
        //    if (TableCheckHelper.CheckTimeDefine(DateTimeValue.DefaultTimeInputFormat, out tempErrorString) == false)
        //        errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, DateTimeValue.APP_CONFIG_KEY_DEFAULT_TIME_INPUT_FORMAT, DateTimeValue.DefaultTimeInputFormat, tempErrorString);
        //}
        //if (AppValues.ConfigData.ContainsKey(LuaStruct.DefaultTimeToExportFormatKey))
        //{
        //    LuaStruct.DefaultTimeToExportFormat = AppValues.ConfigData[LuaStruct.DefaultTimeToExportFormatKey].Trim();
        //    if (TableCheckHelper.CheckTimeDefine(LuaStruct.DefaultTimeToExportFormat, out tempErrorString) == false)
        //        errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, LuaStruct.DefaultTimeToExportFormatKey, LuaStruct.DefaultTimeToExportFormat, tempErrorString);
        //}
        //if (AppValues.ConfigData.ContainsKey(MySQLStruct.DefaultTimeToExportFormatKey))
        //{
        //    MySQLStruct.DefaultTimeToExportFormat = AppValues.ConfigData[MySQLStruct.DefaultTimeToExportFormatKey].Trim();
        //    if (TableCheckHelper.CheckTimeDefine(MySQLStruct.DefaultTimeToExportFormat, out tempErrorString) == false)
        //        errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, MySQLStruct.DefaultTimeToExportFormatKey, MySQLStruct.DefaultTimeToExportFormat, tempErrorString);
        //}

        string errorConfigString = errorStringBuilder.ToString();

        if (!string.IsNullOrEmpty(errorConfigString))
        {
            errorConfigString = string.Concat("配置文件中存在以下错误,请修正后重试\n", errorConfigString);
            AppLog.LogErrorAndExit(errorConfigString);
        }
    }
Esempio n. 5
0
    /// <summary>
    /// 传入参数中,第1个必须为Excel表格所在目录,第2个必须为存放导出lua文件的目录,第3个参数为项目Client目录的路径(无需文件存在型检查规则则填-noClient),第4个参数为必须为lang文件路径(没有填-noLang)
    /// 可附加参数有:
    /// 1) -columnInfo(在生成lua文件的最上方用注释形式显示列信息,默认不开启)
    /// 2) -unchecked(不对表格进行查错,不推荐使用)
    /// 3) -printEmptyStringWhenLangNotMatching(当lang型数据key在lang文件中找不到对应值时,在lua文件输出字段值为空字符串即xx = "",默认为输出nil)
    /// 4) -exportMySQL(将表格数据导出到MySQL数据库中,默认不导出)
    /// 5) -part(后面在英文小括号内声明本次要导出的Excel文件名,用|分隔,未声明的文件将被本工具忽略)
    /// 6) -allowedNullNumber(允许int、long、float型字段下填写空值,默认不允许)
    /// 7) 声明要将指定的Excel表导出为csv文件需要以下2个参数:
    ///    -exportCsv(后面在英文小括号内声明本次要额外导出csv文件的Excel文件名,用|分隔。注意如果-part参数中未指定本次要导出某个Excel表,即便声明要导出csv文件也不会生效)
    ///    -exportCsvParam(可声明导出csv文件的参数)
    /// 8) 声明要将指定的Excel表导出为json文件需要以下2个参数:
    ///    -exportJson(后面在英文小括号内声明本次要额外导出json文件的Excel文件名,用|分隔。注意如果-part参数中未指定本次要导出某个Excel表,即便声明要导出json文件也不会生效)
    ///    -exportJsonParam(可声明导出json文件的参数)
    /// </summary>
    static void Main(string[] args)
    {
        // 检查第1个参数(Excel表格所在目录)是否正确
        if (args.Length < 1)
        {
            Utils.LogErrorAndExit("错误:未输入Excel表格所在目录");
        }
        if (!Directory.Exists(args[0]))
        {
            Utils.LogErrorAndExit(string.Format("错误:输入的Excel表格所在目录不存在,路径为{0}", args[0]));
        }

        AppValues.ExcelFolderPath = Path.GetFullPath(args[0]);
        Utils.Log(string.Format("选择的Excel所在路径:{0}", AppValues.ExcelFolderPath));

        // 记录目录中存在的所有Excel文件名(注意不能直接用File.Exists判断某个字符串代表的文件名是否存在,因为Windows会忽略声明的Excel文件名与实际文件名的大小写差异)
        List <string> existExcelFilePaths = new List <string>(Directory.GetFiles(AppValues.ExcelFolderPath, "*.xlsx"));
        List <string> existExcelFileNames = new List <string>();

        foreach (string filePath in existExcelFilePaths)
        {
            existExcelFileNames.Add(Path.GetFileNameWithoutExtension(filePath));
        }

        // 检查第2个参数(存放导出lua文件的目录)是否正确
        if (args.Length < 2)
        {
            Utils.LogErrorAndExit("错误:未输入要将生成lua文件存放的路径");
        }
        if (!Directory.Exists(args[1]))
        {
            Utils.LogErrorAndExit(string.Format("错误:输入的lua文件导出路径不存在,路径为{0}", args[1]));
        }

        AppValues.ExportLuaFilePath = Path.GetFullPath(args[1]);
        Utils.Log(string.Format("选择的lua文件导出路径:{0}", AppValues.ExportLuaFilePath));
        // 检查第3个参数(项目Client目录的路径)是否正确
        if (args.Length < 3)
        {
            Utils.LogErrorAndExit("错误:未输入项目Client目录的路径,如果不需要请输入参数-noClient");
        }
        if (AppValues.NO_CLIENT_PATH_STRING.Equals(args[2], StringComparison.CurrentCultureIgnoreCase))
        {
            Utils.LogWarning("警告:你选择了不指定Client文件夹路径,则本工具无法检查表格中填写的图片路径等对应的文件是否存在");
            AppValues.ClientPath = null;
        }
        else if (Directory.Exists(args[2]))
        {
            AppValues.ClientPath = Path.GetFullPath(args[2]);
            Utils.Log(string.Format("Client目录完整路径:{0}", AppValues.ClientPath));
        }
        else
        {
            Utils.LogErrorAndExit(string.Format("错误:请检查输入的Client路径是否正确{0}", args[2]));
        }

        // 检查第4个参数(lang文件路径)是否正确
        if (args.Length < 4)
        {
            Utils.LogErrorAndExit("错误:未输入lang文件路径或未声明不含lang文件(使用-noLang)");
        }
        if (AppValues.NO_LANG_PARAM_STRING.Equals(args[3], StringComparison.CurrentCultureIgnoreCase))
        {
            AppValues.LangFilePath = null;
            Utils.Log("选择的lang文件路径:无");
        }
        else if (File.Exists(args[3]))
        {
            AppValues.LangFilePath = Path.GetFullPath(args[3]);
            Utils.Log(string.Format("选择的lang文件路径:{0}", AppValues.LangFilePath));

            // 解析lang文件
            string errorString = null;
            AppValues.LangData = TxtConfigReader.ParseTxtConfigFile(AppValues.LangFilePath, ":", out errorString);
            if (!string.IsNullOrEmpty(errorString))
            {
                Utils.LogErrorAndExit(errorString);
            }
        }
        else
        {
            Utils.LogErrorAndExit(string.Format("错误:输入的lang文件不存在,路径为{0}", args[3]));
        }

        // 检查其他参数
        for (int i = 4; i < args.Length; ++i)
        {
            string param = args[i];

            if (param.Equals(AppValues.UNCHECKED_PARAM_STRING, StringComparison.CurrentCultureIgnoreCase))
            {
                AppValues.IsNeedCheck = false;
                Utils.LogWarning("警告:你选择了不进行表格检查,请务必自己保证表格的正确性");
            }
            else if (param.Equals(AppValues.NEED_COLUMN_INFO_PARAM_STRING, StringComparison.CurrentCultureIgnoreCase))
            {
                AppValues.IsNeedColumnInfo = true;
                Utils.LogWarning("你选择了在生成的lua文件最上方用注释形式显示列信息");
            }
            else if (param.Equals(AppValues.LANG_NOT_MATCHING_PRINT_PARAM_STRING, StringComparison.CurrentCultureIgnoreCase))
            {
                AppValues.IsPrintEmptyStringWhenLangNotMatching = true;
                Utils.LogWarning("你选择了当lang型数据key在lang文件中找不到对应值时,在lua文件输出字段值为空字符串");
            }
            else if (param.Equals(AppValues.EXPORT_MYSQL_PARAM_STRING, StringComparison.CurrentCultureIgnoreCase))
            {
                AppValues.IsExportMySQL = true;
                Utils.LogWarning("你选择了导出表格数据到MySQL数据库");
            }
            else if (param.StartsWith(AppValues.PART_EXPORT_PARAM_STRING, StringComparison.CurrentCultureIgnoreCase))
            {
                // 解析声明的本次要导出的Excel名
                string   errorString = null;
                string[] fileNames   = Utils.GetExcelFileNames(param, out errorString);
                if (errorString != null)
                {
                    Utils.LogErrorAndExit(string.Format("错误:声明导出部分Excel表格的参数{0}后{1}", AppValues.PART_EXPORT_PARAM_STRING, errorString));
                }
                else
                {
                    foreach (string fileName in fileNames)
                    {
                        AppValues.exportTableNames.Add(fileName.Trim());
                    }

                    // 检查指定导出的Excel文件是否存在
                    foreach (string exportExcelFileName in AppValues.exportTableNames)
                    {
                        if (!existExcelFileNames.Contains(exportExcelFileName))
                        {
                            Utils.LogErrorAndExit(string.Format("要求导出的Excel文件({0})不存在,请检查后重试并注意区分大小写", Utils.CombinePath(AppValues.ExcelFolderPath, string.Concat(exportExcelFileName, ".xlsx"))));
                        }
                    }

                    Utils.LogWarning(string.Format("警告:本次将仅检查并导出以下Excel文件:\n{0}\n", Utils.CombineString(AppValues.exportTableNames, ", ")));
                }
            }
            // 注意:-exportCsv与-exportCsvParam均以-exportCsv开头,故要先判断-exportCsvParam分支。这里将-exportCsvParam的解析放到-exportCsv的解析之中是为了只有声明了进行csv文件导出时才解析导出参数
            else if (param.StartsWith(AppValues.EXPORT_CSV_PARAM_PARAM_STRING, StringComparison.CurrentCultureIgnoreCase))
            {
                continue;
            }
            else if (param.StartsWith(AppValues.EXPORT_CSV_PARAM_STRING, StringComparison.CurrentCultureIgnoreCase))
            {
                // 首先解析并判断配置的csv文件导出参数是否正确
                string exportCsvParamString = null;
                for (int j = 4; j < args.Length; ++j)
                {
                    string tempParam = args[j];
                    if (tempParam.StartsWith(AppValues.EXPORT_CSV_PARAM_PARAM_STRING, StringComparison.CurrentCultureIgnoreCase))
                    {
                        exportCsvParamString = tempParam;
                        break;
                    }
                }
                if (exportCsvParamString != null)
                {
                    int leftBracketIndex  = exportCsvParamString.IndexOf('(');
                    int rightBracketIndex = exportCsvParamString.LastIndexOf(')');
                    if (leftBracketIndex == -1 || rightBracketIndex == -1 || leftBracketIndex > rightBracketIndex)
                    {
                        Utils.LogErrorAndExit(string.Format("错误:声明导出csv文件的参数{0}后必须在英文小括号内声明各个具体参数", AppValues.EXPORT_CSV_PARAM_PARAM_STRING));
                    }
                    else
                    {
                        string paramString = exportCsvParamString.Substring(leftBracketIndex + 1, rightBracketIndex - leftBracketIndex - 1);
                        // 通过|分隔各个参数,但因为用户设置的csv文件中的字段分隔符本身可能为|,本工具采用\|配置进行转义,故需要自行从头遍历查找真正的参数分隔符
                        // 记录参数分隔符的下标位置
                        List <int> splitParamCharIndex = new List <int>();
                        for (int index = 0; index < paramString.Length; ++index)
                        {
                            char c = paramString[index];
                            if (c == '|' && (index < 1 || (index > 1 && paramString[index - 1] != '\\')))
                            {
                                splitParamCharIndex.Add(index);
                            }
                        }
                        // 通过识别的参数分隔符,分隔各个参数
                        List <string> paramStringList         = new List <string>();
                        int           lastSplitParamChatIndex = -1;
                        foreach (int index in splitParamCharIndex)
                        {
                            paramStringList.Add(paramString.Substring(lastSplitParamChatIndex + 1, index - lastSplitParamChatIndex - 1));
                            lastSplitParamChatIndex = index;
                        }
                        // 解析各个具体参数
                        foreach (string oneParamString in paramStringList)
                        {
                            if (string.IsNullOrEmpty(oneParamString))
                            {
                                continue;
                            }

                            string[] keyAndValue = oneParamString.Split(new char[] { '=' });
                            if (keyAndValue.Length != 2)
                            {
                                Utils.LogErrorAndExit(string.Format("声明的{0}参数下属的参数字符串{1}错误,参数名和配置值之间应用=分隔", AppValues.EXPORT_CSV_PARAM_PARAM_STRING, oneParamString));
                            }
                            else
                            {
                                string key   = keyAndValue[0].Trim();
                                string value = keyAndValue[1];
                                if (AppValues.EXPORT_CSV_PARAM_EXPORT_PATH_PARAM_STRING.Equals(key, StringComparison.CurrentCultureIgnoreCase))
                                {
                                    // 检查导出路径是否存在
                                    if (!Directory.Exists(value))
                                    {
                                        Utils.LogErrorAndExit(string.Format("错误:声明的{0}参数下属的参数{1}所配置的csv文件导出路径不存在", AppValues.EXPORT_CSV_PARAM_PARAM_STRING, AppValues.EXPORT_CSV_PARAM_EXPORT_PATH_PARAM_STRING));
                                    }
                                    else
                                    {
                                        AppValues.exportCsvPath = value;
                                    }
                                }
                                else if (AppValues.EXPORT_CSV_PARAM_EXTENSION_PARAM_STRING.Equals(key, StringComparison.CurrentCultureIgnoreCase))
                                {
                                    value = value.Trim();
                                    if (string.IsNullOrEmpty(value))
                                    {
                                        Utils.LogErrorAndExit(string.Format("错误:声明的{0}参数下属的参数{1}所配置的导出csv文件的扩展名不允许为空", AppValues.EXPORT_CSV_PARAM_PARAM_STRING, AppValues.EXPORT_CSV_PARAM_EXTENSION_PARAM_STRING));
                                    }
                                    if (value.StartsWith("."))
                                    {
                                        value = value.Substring(1);
                                    }

                                    AppValues.exportCsvExtension = value;
                                }
                                else if (AppValues.EXPORT_CSV_PARAM_SPLIT_STRING_PARAM_STRING.Equals(key, StringComparison.CurrentCultureIgnoreCase))
                                {
                                    value = value.Replace("\\|", "|");
                                    AppValues.exportCsvSplitString = value;
                                }
                                else if (AppValues.EXPORT_CSV_PARAM_IS_EXPORT_COLUMN_NAME_PARAM_STRING.Equals(key, StringComparison.CurrentCultureIgnoreCase))
                                {
                                    value = value.Trim();
                                    if ("true".Equals(value, StringComparison.CurrentCultureIgnoreCase))
                                    {
                                        AppValues.exportCsvIsExportColumnName = true;
                                    }
                                    else if ("false".Equals(value, StringComparison.CurrentCultureIgnoreCase))
                                    {
                                        AppValues.exportCsvIsExportColumnName = false;
                                    }
                                    else
                                    {
                                        Utils.LogErrorAndExit(string.Format("错误:声明的{0}参数下属的参数{1}所配置的值错误,必须为true或false", AppValues.EXPORT_CSV_PARAM_PARAM_STRING, AppValues.EXPORT_CSV_PARAM_IS_EXPORT_COLUMN_NAME_PARAM_STRING));
                                    }
                                }
                                else if (AppValues.EXPORT_CSV_PARAM_IS_EXPORT_COLUMN_DATA_TYPE_PARAM_STRING.Equals(key, StringComparison.CurrentCultureIgnoreCase))
                                {
                                    value = value.Trim();
                                    if ("true".Equals(value, StringComparison.CurrentCultureIgnoreCase))
                                    {
                                        AppValues.exportCsvIsExportColumnDataType = true;
                                    }
                                    else if ("false".Equals(value, StringComparison.CurrentCultureIgnoreCase))
                                    {
                                        AppValues.exportCsvIsExportColumnDataType = false;
                                    }
                                    else
                                    {
                                        Utils.LogErrorAndExit(string.Format("错误:声明的{0}参数下属的参数{1}所配置的值错误,必须为true或false", AppValues.EXPORT_CSV_PARAM_PARAM_STRING, AppValues.EXPORT_CSV_PARAM_IS_EXPORT_COLUMN_DATA_TYPE_PARAM_STRING));
                                    }
                                }
                                else
                                {
                                    Utils.LogErrorAndExit(string.Format("错误:声明的{0}参数下属的参数{1}非法", AppValues.EXPORT_CSV_PARAM_PARAM_STRING, key));
                                }
                            }
                        }
                        // 要求必须含有exportPath参数
                        if (AppValues.exportCsvPath == null)
                        {
                            Utils.LogErrorAndExit(string.Format("错误:声明要额外导出指定Excel文件为csv文件,就必须同时在{0}参数下声明用于配置csv文件导出路径的参数{1}", AppValues.EXPORT_CSV_PARAM_PARAM_STRING, AppValues.EXPORT_CSV_PARAM_EXPORT_PATH_PARAM_STRING));
                        }
                    }
                }
                else
                {
                    Utils.LogErrorAndExit(string.Format("错误:声明要额外导出指定Excel文件为csv文件,就必须同时声明用于配置csv文件导出参数的{0}", AppValues.EXPORT_CSV_PARAM_PARAM_STRING));
                }

                // 解析配置的要额外导出csv文件的Excel文件名
                string   errorString = null;
                string[] fileNames   = Utils.GetExcelFileNames(param, out errorString);
                if (errorString != null)
                {
                    Utils.LogErrorAndExit(string.Format("错误:声明额外导出为csv文件的参数{0}后{1}", AppValues.EXPORT_CSV_PARAM_STRING, errorString));
                }
                else
                {
                    // 检查指定导出的Excel文件是否存在
                    foreach (string fileName in fileNames)
                    {
                        if (!existExcelFileNames.Contains(fileName))
                        {
                            Utils.LogErrorAndExit(string.Format("要求额外导出为csv文件的Excel表({0})不存在,请检查后重试并注意区分大小写", Utils.CombinePath(AppValues.exportCsvPath, string.Concat(fileName, ".xlsx"))));
                        }
                        else
                        {
                            AppValues.exportCsvTableNames.Add(fileName);
                        }
                    }
                }
            }
            // 注意:-exportJson与-exportJsonParam均以-exportJson开头,故要先判断-exportJsonParam分支。这里将-exportJsonParam的解析放到-exportJson的解析之中是为了只有声明了进行json文件导出时才解析导出参数
            else if (param.StartsWith(AppValues.EXPORT_JSON_PARAM_PARAM_STRING, StringComparison.CurrentCultureIgnoreCase))
            {
                continue;
            }
            else if (param.StartsWith(AppValues.EXPORT_JSON_PARAM_STRING, StringComparison.CurrentCultureIgnoreCase))
            {
                // 首先解析并判断配置的json文件导出参数是否正确
                string exportJsonParamString = null;
                for (int j = 4; j < args.Length; ++j)
                {
                    string tempParam = args[j];
                    if (tempParam.StartsWith(AppValues.EXPORT_JSON_PARAM_PARAM_STRING, StringComparison.CurrentCultureIgnoreCase))
                    {
                        exportJsonParamString = tempParam;
                        break;
                    }
                }
                if (exportJsonParamString != null)
                {
                    int leftBracketIndex  = exportJsonParamString.IndexOf('(');
                    int rightBracketIndex = exportJsonParamString.LastIndexOf(')');
                    if (leftBracketIndex == -1 || rightBracketIndex == -1 || leftBracketIndex > rightBracketIndex)
                    {
                        Utils.LogErrorAndExit(string.Format("错误:声明导出json文件的参数{0}后必须在英文小括号内声明各个具体参数", AppValues.EXPORT_JSON_PARAM_PARAM_STRING));
                    }
                    else
                    {
                        string paramString = exportJsonParamString.Substring(leftBracketIndex + 1, rightBracketIndex - leftBracketIndex - 1);
                        // 通过|分隔各个参数
                        string[] paramStringList = paramString.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
                        // 解析各个具体参数
                        foreach (string oneParamString in paramStringList)
                        {
                            string[] keyAndValue = oneParamString.Split(new char[] { '=' });
                            if (keyAndValue.Length != 2)
                            {
                                Utils.LogErrorAndExit(string.Format("声明的{0}参数下属的参数字符串{1}错误,参数名和配置值之间应用=分隔", AppValues.EXPORT_JSON_PARAM_PARAM_STRING, oneParamString));
                            }
                            else
                            {
                                string key   = keyAndValue[0].Trim();
                                string value = keyAndValue[1];
                                if (AppValues.EXPORT_JSON_PARAM_EXPORT_PATH_PARAM_STRING.Equals(key, StringComparison.CurrentCultureIgnoreCase))
                                {
                                    // 检查导出路径是否存在
                                    if (!Directory.Exists(value))
                                    {
                                        Utils.LogErrorAndExit(string.Format("错误:声明的{0}参数下属的参数{1}所配置的json文件导出路径不存在", AppValues.EXPORT_JSON_PARAM_PARAM_STRING, AppValues.EXPORT_JSON_PARAM_EXPORT_PATH_PARAM_STRING));
                                    }
                                    else
                                    {
                                        AppValues.exportJsonPath = value;
                                    }
                                }
                                else if (AppValues.EXPORT_JSON_PARAM_EXTENSION_PARAM_STRING.Equals(key, StringComparison.CurrentCultureIgnoreCase))
                                {
                                    value = value.Trim();
                                    if (string.IsNullOrEmpty(value))
                                    {
                                        Utils.LogErrorAndExit(string.Format("错误:声明的{0}参数下属的参数{1}所配置的导出json文件的扩展名不允许为空", AppValues.EXPORT_JSON_PARAM_PARAM_STRING, AppValues.EXPORT_JSON_PARAM_EXTENSION_PARAM_STRING));
                                    }
                                    if (value.StartsWith("."))
                                    {
                                        value = value.Substring(1);
                                    }

                                    AppValues.exportJsonExtension = value;
                                }
                                else if (AppValues.EXPORT_JSON_PARAM_IS_FORMAT_PARAM_STRING.Equals(key, StringComparison.CurrentCultureIgnoreCase))
                                {
                                    value = value.Trim();
                                    if ("true".Equals(value, StringComparison.CurrentCultureIgnoreCase))
                                    {
                                        AppValues.exportJsonIsFormat = true;
                                    }
                                    else if ("false".Equals(value, StringComparison.CurrentCultureIgnoreCase))
                                    {
                                        AppValues.exportJsonIsFormat = false;
                                    }
                                    else
                                    {
                                        Utils.LogErrorAndExit(string.Format("错误:声明的{0}参数下属的参数{1}所配置的值错误,必须为true或false", AppValues.EXPORT_JSON_PARAM_PARAM_STRING, AppValues.EXPORT_JSON_PARAM_IS_FORMAT_PARAM_STRING));
                                    }
                                }
                                else
                                {
                                    Utils.LogErrorAndExit(string.Format("错误:声明的{0}参数下属的参数{1}非法", AppValues.EXPORT_JSON_PARAM_PARAM_STRING, key));
                                }
                            }
                        }
                        // 要求必须含有exportPath参数
                        if (AppValues.exportJsonPath == null)
                        {
                            Utils.LogErrorAndExit(string.Format("错误:声明要额外导出指定Excel文件为json文件,就必须同时在{0}参数下声明用于配置json文件导出路径的参数{1}", AppValues.EXPORT_JSON_PARAM_PARAM_STRING, AppValues.EXPORT_JSON_PARAM_EXPORT_PATH_PARAM_STRING));
                        }
                    }
                }
                else
                {
                    Utils.LogErrorAndExit(string.Format("错误:声明要额外导出指定Excel文件为json文件,就必须同时声明用于配置json文件导出参数的{0}", AppValues.EXPORT_JSON_PARAM_PARAM_STRING));
                }

                // 解析配置的要额外导出json文件的Excel文件名
                string   errorString = null;
                string[] fileNames   = Utils.GetExcelFileNames(param, out errorString);
                if (errorString != null)
                {
                    Utils.LogErrorAndExit(string.Format("错误:声明额外导出为json文件的参数{0}后{1}", AppValues.EXPORT_JSON_PARAM_STRING, errorString));
                }
                else
                {
                    // 检查指定导出的Excel文件是否存在
                    foreach (string fileName in fileNames)
                    {
                        if (!existExcelFileNames.Contains(fileName))
                        {
                            Utils.LogErrorAndExit(string.Format("要求额外导出为json文件的Excel表({0})不存在,请检查后重试并注意区分大小写", Utils.CombinePath(AppValues.exportJsonPath, string.Concat(fileName, ".xlsx"))));
                        }
                        else
                        {
                            AppValues.exportJsonTableNames.Add(fileName);
                        }
                    }
                }
            }
            else if (param.StartsWith(AppValues.ALLOWED_NULL_NUMBER_PARAM_STRING, StringComparison.CurrentCultureIgnoreCase))
            {
                AppValues.IsAllowedNullNumber = true;
                Utils.LogWarning("警告:你选择了允许int、long、float字段中存在空值,建议为逻辑上不允许为空的数值型字段声明使用notEmpty检查规则");
            }
            else
            {
                Utils.LogErrorAndExit(string.Format("错误:未知的指令参数{0}", param));
            }
        }

        // 如果未指定导出部分Excel文件,则全部导出
        if (AppValues.exportTableNames.Count == 0)
        {
            foreach (string filePath in Directory.GetFiles(AppValues.ExcelFolderPath, "*.xlsx"))
            {
                string fileName = Path.GetFileNameWithoutExtension(filePath);
                if (fileName.StartsWith(AppValues.EXCEL_TEMP_FILE_FILE_NAME_START_STRING))
                {
                    Utils.LogWarning(string.Format("目录中的{0}文件为Excel自动生成的临时文件,将被忽略处理", filePath));
                }
                else
                {
                    AppValues.exportTableNames.Add(Path.GetFileNameWithoutExtension(filePath));
                }
            }
        }

        // 如果声明要额外导出为csv文件的Excel表本身在本次被忽略,需要进行警告
        List <string> warnExportCsvTableNames = new List <string>();

        foreach (string exportCsvTableName in AppValues.exportCsvTableNames)
        {
            if (!AppValues.exportTableNames.Contains(exportCsvTableName))
            {
                warnExportCsvTableNames.Add(exportCsvTableName);
            }
        }
        if (warnExportCsvTableNames.Count > 0)
        {
            Utils.LogWarning(string.Format("警告:以下Excel表声明为要额外导出为csv文件,但在{0}参数中未声明本次要对其进行导出,本工具将不对这些表格执行导出csv文件的操作\n{1}", AppValues.PART_EXPORT_PARAM_STRING, Utils.CombineString(warnExportCsvTableNames, ", ")));
            foreach (string tableName in warnExportCsvTableNames)
            {
                AppValues.exportCsvTableNames.Remove(tableName);
            }
        }
        if (AppValues.exportCsvTableNames.Count > 0)
        {
            Utils.Log(string.Format("本次将以下Excel表额外导出为csv文件:\n{0}\n", Utils.CombineString(AppValues.exportCsvTableNames, ", ")));
        }

        // 如果声明要额外导出为json文件的Excel表本身在本次被忽略,需要进行警告
        List <string> warnExportJsonTableNames = new List <string>();

        foreach (string exportJsonTableName in AppValues.exportJsonTableNames)
        {
            if (!AppValues.exportTableNames.Contains(exportJsonTableName))
            {
                warnExportJsonTableNames.Add(exportJsonTableName);
            }
        }
        if (warnExportJsonTableNames.Count > 0)
        {
            Utils.LogWarning(string.Format("警告:以下Excel表声明为要额外导出为json文件,但在{0}参数中未声明本次要对其进行导出,本工具将不对这些表格执行导出json文件的操作\n{1}", AppValues.PART_EXPORT_PARAM_STRING, Utils.CombineString(warnExportJsonTableNames, ", ")));
            foreach (string tableName in warnExportJsonTableNames)
            {
                AppValues.exportJsonTableNames.Remove(tableName);
            }
        }
        if (AppValues.exportJsonTableNames.Count > 0)
        {
            Utils.Log(string.Format("本次将以下Excel表额外导出为json文件:\n{0}\n", Utils.CombineString(AppValues.exportJsonTableNames, ", ")));
        }

        // 解析本工具所在目录下的config文件
        string configFilePath = Utils.CombinePath(AppValues.PROGRAM_FOLDER_PATH, AppValues.CONFIG_FILE_NAME);

        if (File.Exists(configFilePath))
        {
            string errorString = null;
            AppValues.ConfigData = TxtConfigReader.ParseTxtConfigFile(configFilePath, ":", out errorString);
            if (!string.IsNullOrEmpty(errorString))
            {
                Utils.LogErrorAndExit(errorString);
            }
        }
        else
        {
            Utils.LogWarning(string.Format("警告:找不到本工具所在路径下的{0}配置文件,请确定是否真的不需要自定义配置", AppValues.CONFIG_FILE_NAME));
        }

        // 读取部分配置项并进行检查
        const string  ERROR_STRING_FORMAT = "配置项\"{0}\"所设置的值\"{1}\"非法:{2}\n";
        StringBuilder errorStringBuilder  = new StringBuilder();
        string        tempErrorString     = null;

        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_DEFAULT_DATE_INPUT_FORMAT))
        {
            AppValues.DefaultDateInputFormat = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_DEFAULT_DATE_INPUT_FORMAT].Trim();
            if (TableCheckHelper.CheckDateInputDefine(AppValues.DefaultDateInputFormat, out tempErrorString) == false)
            {
                errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, AppValues.APP_CONFIG_KEY_DEFAULT_DATE_INPUT_FORMAT, AppValues.DefaultDateInputFormat, tempErrorString);
            }
        }
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_DEFAULT_DATE_TO_LUA_FORMAT))
        {
            AppValues.DefaultDateToLuaFormat = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_DEFAULT_DATE_TO_LUA_FORMAT].Trim();
            if (TableCheckHelper.CheckDateToLuaDefine(AppValues.DefaultDateToLuaFormat, out tempErrorString) == false)
            {
                errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, AppValues.APP_CONFIG_KEY_DEFAULT_DATE_TO_LUA_FORMAT, AppValues.DefaultDateToLuaFormat, tempErrorString);
            }
        }
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_DEFAULT_DATE_TO_DATABASE_FORMAT))
        {
            AppValues.DefaultDateToDatabaseFormat = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_DEFAULT_DATE_TO_DATABASE_FORMAT].Trim();
            if (TableCheckHelper.CheckDateToDatabaseDefine(AppValues.DefaultDateToDatabaseFormat, out tempErrorString) == false)
            {
                errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, AppValues.APP_CONFIG_KEY_DEFAULT_DATE_TO_DATABASE_FORMAT, AppValues.DefaultDateToDatabaseFormat, tempErrorString);
            }
        }
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_DEFAULT_TIME_INPUT_FORMAT))
        {
            AppValues.DefaultTimeInputFormat = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_DEFAULT_TIME_INPUT_FORMAT].Trim();
            if (TableCheckHelper.CheckTimeDefine(AppValues.DefaultTimeInputFormat, out tempErrorString) == false)
            {
                errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, AppValues.APP_CONFIG_KEY_DEFAULT_TIME_INPUT_FORMAT, AppValues.DefaultTimeInputFormat, tempErrorString);
            }
        }
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_DEFAULT_TIME_TO_LUA_FORMAT))
        {
            AppValues.DefaultTimeToLuaFormat = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_DEFAULT_TIME_TO_LUA_FORMAT].Trim();
            if (TableCheckHelper.CheckTimeDefine(AppValues.DefaultTimeToLuaFormat, out tempErrorString) == false)
            {
                errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, AppValues.APP_CONFIG_KEY_DEFAULT_TIME_TO_LUA_FORMAT, AppValues.DefaultTimeToLuaFormat, tempErrorString);
            }
        }
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_DEFAULT_TIME_TO_DATABASE_FORMAT))
        {
            AppValues.DefaultTimeToDatabaseFormat = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_DEFAULT_TIME_TO_DATABASE_FORMAT].Trim();
            if (TableCheckHelper.CheckTimeDefine(AppValues.DefaultTimeToDatabaseFormat, out tempErrorString) == false)
            {
                errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, AppValues.APP_CONFIG_KEY_DEFAULT_TIME_TO_DATABASE_FORMAT, AppValues.DefaultTimeToDatabaseFormat, tempErrorString);
            }
        }

        string errorConfigString = errorStringBuilder.ToString();

        if (!string.IsNullOrEmpty(errorConfigString))
        {
            errorConfigString = string.Concat("配置文件中存在以下错误,请修正后重试\n", errorConfigString);
            Utils.LogErrorAndExit(errorConfigString);
        }

        // 读取给定的Excel所在目录下的所有Excel文件,然后解析成本工具所需的数据结构
        Utils.Log("开始解析Excel所在目录下的所有Excel文件:");
        Stopwatch stopwatch = new Stopwatch();

        foreach (string filePath in Directory.GetFiles(AppValues.ExcelFolderPath, "*.xlsx"))
        {
            string fileName = Path.GetFileNameWithoutExtension(filePath);
            if (fileName.StartsWith(AppValues.EXCEL_TEMP_FILE_FILE_NAME_START_STRING))
            {
                continue;
            }

            Utils.Log(string.Format("解析表格\"{0}\":", fileName), ConsoleColor.Green);
            stopwatch.Reset();
            stopwatch.Start();

            string  errorString = null;
            DataSet ds          = XlsxReader.ReadXlsxFile(filePath, out errorString);
            stopwatch.Stop();
            Utils.Log(string.Format("成功,耗时:{0}毫秒", stopwatch.ElapsedMilliseconds));
            if (string.IsNullOrEmpty(errorString))
            {
                TableInfo tableInfo = TableAnalyzeHelper.AnalyzeTable(ds.Tables[AppValues.EXCEL_DATA_SHEET_NAME], fileName, out errorString);
                if (errorString != null)
                {
                    Utils.LogErrorAndExit(string.Format("错误:解析{0}失败\n{1}", filePath, errorString));
                }
                else
                {
                    // 如果有表格配置进行解析
                    if (ds.Tables[AppValues.EXCEL_CONFIG_SHEET_NAME] != null)
                    {
                        tableInfo.TableConfig = TableAnalyzeHelper.GetTableConfig(ds.Tables[AppValues.EXCEL_CONFIG_SHEET_NAME], out errorString);
                        if (!string.IsNullOrEmpty(errorString))
                        {
                            Utils.LogErrorAndExit(string.Format("错误:解析表格{0}的配置失败\n{1}", fileName, errorString));
                        }
                    }

                    AppValues.TableInfo.Add(tableInfo.TableName, tableInfo);
                }
            }
            else
            {
                Utils.LogErrorAndExit(string.Format("错误:读取{0}失败\n{1}", filePath, errorString));
            }
        }

        // 进行表格检查
        bool isTableAllRight = true;

        if (AppValues.IsNeedCheck == true)
        {
            Utils.Log("\n下面开始进行表格检查:");

            foreach (string tableName in AppValues.exportTableNames)
            {
                TableInfo tableInfo   = AppValues.TableInfo[tableName];
                string    errorString = null;
                Utils.Log(string.Format("检查表格\"{0}\":", tableInfo.TableName), ConsoleColor.Green);
                TableCheckHelper.CheckTable(tableInfo, out errorString);
                if (errorString != null)
                {
                    Utils.LogError(errorString);
                    isTableAllRight = false;
                }
                else
                {
                    Utils.Log("正确");
                }
            }
        }
        if (isTableAllRight == true)
        {
            Utils.Log("\n表格检查完毕,没有发现错误,开始导出为lua文件\n");
            // 进行表格导出
            foreach (string tableName in AppValues.exportTableNames)
            {
                TableInfo tableInfo   = AppValues.TableInfo[tableName];
                string    errorString = null;
                Utils.Log(string.Format("导出表格\"{0}\":", tableInfo.TableName), ConsoleColor.Green);
                bool isNeedExportOriginalTable = true;
                // 判断是否设置了特殊导出规则
                if (tableInfo.TableConfig != null && tableInfo.TableConfig.ContainsKey(AppValues.CONFIG_NAME_EXPORT))
                {
                    List <string> inputParams = tableInfo.TableConfig[AppValues.CONFIG_NAME_EXPORT];
                    if (inputParams.Contains(AppValues.CONFIG_PARAM_NOT_EXPORT_ORIGINAL_TABLE))
                    {
                        isNeedExportOriginalTable = false;
                        if (inputParams.Count == 1)
                        {
                            Utils.LogWarning(string.Format("警告:你设置了不对表格\"{0}\"按默认方式进行导出,而又没有指定任何其他自定义导出规则,本工具对此表格不进行任何导出,请确认是否真要如此", tableInfo.TableName));
                        }
                        else
                        {
                            Utils.Log("你设置了不对此表进行默认规则导出");
                        }
                    }
                    // 执行设置的特殊导出规则
                    foreach (string param in inputParams)
                    {
                        if (!AppValues.CONFIG_PARAM_NOT_EXPORT_ORIGINAL_TABLE.Equals(param, StringComparison.CurrentCultureIgnoreCase))
                        {
                            Utils.Log(string.Format("对此表格按\"{0}\"自定义规则进行导出:", param));
                            TableExportToLuaHelper.SpecialExportTableToLua(tableInfo, param, out errorString);
                            if (errorString != null)
                            {
                                Utils.LogErrorAndExit(string.Format("导出失败:\n{0}\n", errorString));
                            }
                            else
                            {
                                Utils.Log("成功");
                            }
                        }
                    }
                }
                // 对表格按默认方式导出(除非通过参数设置不执行此操作)
                if (isNeedExportOriginalTable == true)
                {
                    TableExportToLuaHelper.ExportTableToLua(tableInfo, out errorString);
                    if (errorString != null)
                    {
                        Utils.LogErrorAndExit(errorString);
                    }
                    else
                    {
                        Utils.Log("按默认方式导出成功");
                    }
                }
                // 判断是否要额外导出为csv文件
                if (AppValues.exportCsvTableNames.Contains(tableName))
                {
                    TableExportToCsvHelper.ExportTableToCsv(tableInfo, out errorString);
                    if (errorString != null)
                    {
                        Utils.LogErrorAndExit(errorString);
                    }
                    else
                    {
                        Utils.Log("额外导出为csv文件成功");
                    }
                }
                // 判断是否要额外导出为json文件
                if (AppValues.exportJsonTableNames.Contains(tableName))
                {
                    TableExportToJsonHelper.ExportTableToJson(tableInfo, out errorString);
                    if (errorString != null)
                    {
                        Utils.LogErrorAndExit(errorString);
                    }
                    else
                    {
                        Utils.Log("额外导出为json文件成功");
                    }
                }
            }

            Utils.Log("\n导出lua文件完毕\n");

            // 进行数据库导出
            if (AppValues.IsExportMySQL == true)
            {
                Utils.Log("\n导出表格数据到MySQL数据库\n");

                string errorString = null;
                TableExportToMySQLHelper.ConnectToDatabase(out errorString);
                if (!string.IsNullOrEmpty(errorString))
                {
                    Utils.LogErrorAndExit(string.Format("无法连接至MySQL数据库:{0}\n导出至MySQL数据库被迫中止,请修正错误后重试\n", errorString));
                }

                foreach (string tableName in AppValues.exportTableNames)
                {
                    TableInfo tableInfo = AppValues.TableInfo[tableName];
                    TableExportToMySQLHelper.ExportTableToDatabase(tableInfo, out errorString);
                    if (!string.IsNullOrEmpty(errorString))
                    {
                        Utils.LogErrorAndExit(string.Format("导出失败:{0}\n导出至MySQL数据库被迫中止,请修正错误后重试\n", errorString));
                    }
                }

                Utils.Log("\n导出到数据库完毕\n");
            }
        }
        else
        {
            Utils.LogError("\n表格检查完毕,但存在上面所列错误,必须全部修正后才可以进行表格导出\n");
            // 将错误信息全部输出保存到txt文件中
            Utils.SaveErrorInfoToFile();
        }

        Utils.Log("\n按任意键退出本工具");
        Console.ReadKey();
    }
Esempio n. 6
0
    static void Main(string[] args)
    {
        // 读取本工具所在路径下的config配置文件
        string errorString    = null;
        string configFilePath = Utils.CombinePath(AppValues.PROGRAM_FOLDER_PATH, AppValues.CONFIG_FILE_NAME);

        AppValues.ConfigData = TxtConfigReader.ParseTxtConfigFile(configFilePath, ":", out errorString);
        if (!string.IsNullOrEmpty(errorString))
        {
            Utils.LogErrorAndExit(errorString);
        }

        // 检查填写的Excel导出目录是否存在
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_EXPORT_EXCEL_PATH))
        {
            AppValues.ExportExcelPath = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_EXPORT_EXCEL_PATH].Trim();
            if (!Directory.Exists(AppValues.ExportExcelPath))
            {
                Utils.LogErrorAndExit(string.Format("config配置文件中声明的导出Excel文件的存放目录不存在,你填写的为\"{0}\"", AppValues.ExportExcelPath));
            }
        }
        else
        {
            Utils.LogErrorAndExit(string.Format("未在config配置文件中以名为\"{0}\"的key声明导出Excel文件的存放目录", AppValues.APP_CONFIG_KEY_EXPORT_EXCEL_PATH));
        }

        // 获取设置的Excel文件中列的最大宽度
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_EXCEL_COLUMN_MAX_WIDTH))
        {
            double inputExcelColumnMaxWidth = -1;
            string inputParam = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_EXCEL_COLUMN_MAX_WIDTH];
            if (double.TryParse(inputParam, out inputExcelColumnMaxWidth) == true)
            {
                if (inputExcelColumnMaxWidth > 0)
                {
                    AppValues.ExcelColumnMaxWidth = inputExcelColumnMaxWidth;
                }
                else
                {
                    Utils.LogErrorAndExit(string.Format("config配置文件中声明的Excel文件中列的最大宽度非法,必须大于0,你输入的为\"{0}\"", inputParam));
                }
            }
            else
            {
                Utils.LogErrorAndExit(string.Format("config配置文件中声明的Excel文件中列的最大宽度不是一个合法数字,你输入的为\"{0}\"", inputParam));
            }
        }
        else
        {
            Utils.LogWarning(string.Format("警告:未在config配置文件中以名为\"{0}\"的key声明生成的Excel文件中列的最大宽度,本工具将不对生成的Excel文件进行美化", AppValues.APP_CONFIG_KEY_EXCEL_COLUMN_MAX_WIDTH));
        }

        const int COLOR_INDEX_MIN = 0;
        const int COLOR_INDEX_MAX = 56;

        // 获取设置的每列背景色,如果进行了设置需检查ColorIndex是否正确
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_COLUMN_BACKGROUND_COLOR))
        {
            AppValues.ColumnBackgroundColorIndex = new List <int>();
            string inputParam = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_COLUMN_BACKGROUND_COLOR];

            string[] colorIndexString = inputParam.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
            if (colorIndexString.Length > 0)
            {
                foreach (string oneColorIndexString in colorIndexString)
                {
                    int oneColorIndex = -1;
                    if (int.TryParse(oneColorIndexString, out oneColorIndex) == true)
                    {
                        if (oneColorIndex >= COLOR_INDEX_MIN && oneColorIndex <= COLOR_INDEX_MAX)
                        {
                            AppValues.ColumnBackgroundColorIndex.Add(oneColorIndex);
                        }
                        else
                        {
                            Utils.LogErrorAndExit(string.Format("config配置文件中声明的颜色索引值\"{0}\"非法,必须介于{1}到{2}之间", oneColorIndex, COLOR_INDEX_MIN, COLOR_INDEX_MAX));
                        }
                    }
                    else
                    {
                        Utils.LogErrorAndExit(string.Format("config配置文件中声明的颜色索引值\"{0}\"不是一个合法数字", oneColorIndexString));
                    }
                }
            }
            else
            {
                Utils.LogErrorAndExit(string.Format("config配置文件中以名为\"{0}\"的key声明各列背景色不允许为空", AppValues.APP_CONFIG_KEY_COLUMN_BACKGROUND_COLOR));
            }
        }

        // 获取设置的data、config两张Sheet表的标签按钮颜色
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_DATA_SHEET_TAB_COLOR))
        {
            string colorIndexString = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_DATA_SHEET_TAB_COLOR];
            int    colorIndex       = -1;
            if (int.TryParse(colorIndexString, out colorIndex) == true)
            {
                if (colorIndex >= COLOR_INDEX_MIN && colorIndex <= COLOR_INDEX_MAX)
                {
                    AppValues.DataSheetTabColorIndex = colorIndex;
                }
                else
                {
                    Utils.LogErrorAndExit(string.Format("config配置文件中声明的data表标签按钮颜色索引值\"{0}\"非法,必须介于{1}到{2}之间", colorIndex, COLOR_INDEX_MIN, COLOR_INDEX_MAX));
                }
            }
            else
            {
                Utils.LogErrorAndExit(string.Format("config配置文件中声明的data表标签按钮颜色索引值\"{0}\"不是一个合法数字", colorIndexString));
            }
        }
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_CONFIG_SHEET_TAB_COLOR))
        {
            string colorIndexString = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_CONFIG_SHEET_TAB_COLOR];
            int    colorIndex       = -1;
            if (int.TryParse(colorIndexString, out colorIndex) == true)
            {
                if (colorIndex >= COLOR_INDEX_MIN && colorIndex <= COLOR_INDEX_MAX)
                {
                    AppValues.ConfigSheetTabColorIndex = colorIndex;
                }
                else
                {
                    Utils.LogErrorAndExit(string.Format("config配置文件中声明的config表标签按钮颜色索引值\"{0}\"非法,必须介于{1}到{2}之间", colorIndex, COLOR_INDEX_MIN, COLOR_INDEX_MAX));
                }
            }
            else
            {
                Utils.LogErrorAndExit(string.Format("config配置文件中声明的config表标签按钮颜色索引值\"{0}\"不是一个合法数字", colorIndexString));
            }
        }

        // 获取要导出的数据表名
        List <string> exportTableName = new List <string>();

        // 在这里自定义获取要导出的数据表名的方法(这里以在config.txt中进行配置为例,还可以采用类似表名特殊前缀标识等方式实现)
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_EXPORT_DATA_TABLE_NAMES))
        {
            string exportTableNameString = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_EXPORT_DATA_TABLE_NAMES].Trim();
            if (string.IsNullOrEmpty(exportTableNameString))
            {
                Utils.LogErrorAndExit(string.Format("config配置文件中以名为\"{0}\"的key声明要导出的数据表名不允许为空", AppValues.APP_CONFIG_KEY_EXPORT_DATA_TABLE_NAMES));
            }
            else
            {
                string[] tableNames = exportTableNameString.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
                foreach (string tableName in tableNames)
                {
                    exportTableName.Add(tableName.Trim());
                }
            }
        }
        else
        {
            Utils.LogErrorAndExit(string.Format("未在config配置文件中以名为\"{0}\"的key声明要导出的数据表名", AppValues.APP_CONFIG_KEY_EXPORT_DATA_TABLE_NAMES));
        }

        // 连接MySQL数据库
        MySQLOperateHelper.ConnectToDatabase(out errorString);
        if (!string.IsNullOrEmpty(errorString))
        {
            Utils.LogErrorAndExit(string.Format("无法连接到MySQL数据库,{0}", errorString));
        }

        // 检查声明的要导出的数据库表格是否存在,若存在导出到Excel
        foreach (string tableName in exportTableName)
        {
            if (MySQLOperateHelper.ExistTableNames.Contains(tableName))
            {
                Utils.Log(string.Format("导出数据表{0}:", tableName));
                ExcelOperateHelper.ExportToExcel(tableName);
                Utils.Log("成功");
            }
            else
            {
                Utils.LogErrorAndExit(string.Format("\n错误:数据库中不存在名为{0}的数据表,请检查配置中声明的导出数据表名与数据库是否对应", tableName));
            }
        }

        Utils.Log("\n按任意键退出本工具");
        Console.ReadKey();
    }
Esempio n. 7
0
    /// <summary>
    /// 传入参数中,第1个必须为Excel表格所在目录,第2个必须为存放导出lua文件的目录,第3个参数为项目Client目录的路径(无需文件存在型检查规则则填-noClient),第4个参数为必须为lang文件路径(没有填-noLang)
    /// 可附加参数为:-columnInfo(在生成lua文件的最上方用注释形式显示列信息,默认不开启),-unchecked(不对表格进行查错,不推荐使用),-printEmptyStringWhenLangNotMatching(当lang型数据key在lang文件中找不到对应值时,在lua文件输出字段值为空字符串即xx = "",默认为输出nil)
    /// </summary>
    static void Main(string[] args)
    {
        // 检查第1个参数(Excel表格所在目录)是否正确
        if (args.Length < 1)
        {
            Utils.LogErrorAndExit("错误:未输入Excel表格所在目录");
        }
        if (!Directory.Exists(args[0]))
        {
            Utils.LogErrorAndExit(string.Format("错误:输入的Excel表格所在目录不存在,路径为{0}", args[0]));
        }

        AppValues.ExcelFolderPath = Path.GetFullPath(args[0]);
        Utils.Log(string.Format("选择的Excel所在路径:{0}", AppValues.ExcelFolderPath));
        // 检查第2个参数(存放导出lua文件的目录)是否正确
        if (args.Length < 2)
        {
            Utils.LogErrorAndExit("错误:未输入要将生成lua文件存放的路径");
        }
        if (!Directory.Exists(args[1]))
        {
            Utils.LogErrorAndExit(string.Format("错误:输入的lua文件导出路径不存在,路径为{0}", args[1]));
        }

        AppValues.ExportLuaFilePath = Path.GetFullPath(args[1]);
        Utils.Log(string.Format("选择的lua文件导出路径:{0}", AppValues.ExportLuaFilePath));
        // 检查第3个参数(项目Client目录的路径)是否正确
        if (args.Length < 3)
        {
            Utils.LogErrorAndExit("错误:未输入项目Client目录的路径,如果不需要请输入参数-noClient");
        }
        if (AppValues.NO_CLIENT_PATH_STRING.Equals(args[2], StringComparison.CurrentCultureIgnoreCase))
        {
            Utils.LogWarning("警告:你选择了不指定Client文件夹路径,则本工具无法检查表格中填写的图片路径等对应的文件是否存在");
            AppValues.ClientPath = null;
        }
        else if (Directory.Exists(args[2]))
        {
            AppValues.ClientPath = Path.GetFullPath(args[2]);
            Utils.Log(string.Format("Client目录完整路径:{0}", AppValues.ClientPath));
        }
        else
        {
            Utils.LogErrorAndExit(string.Format("错误:请检查输入的Client路径是否正确{0}", args[2]));
        }

        // 检查第4个参数(lang文件路径)是否正确
        if (args.Length < 4)
        {
            Utils.LogErrorAndExit("错误:未输入lang文件路径或未声明不含lang文件(使用-noLang)");
        }
        if (AppValues.NO_LONG_PARAM_STRING.Equals(args[3], StringComparison.CurrentCultureIgnoreCase))
        {
            AppValues.LangFilePath = null;
            Utils.Log("选择的lang文件路径:无");
        }
        else if (File.Exists(args[3]))
        {
            AppValues.LangFilePath = Path.GetFullPath(args[3]);
            Utils.Log(string.Format("选择的lang文件路径:{0}", AppValues.LangFilePath));

            // 解析lang文件
            string errorString = null;
            AppValues.LangData = TxtConfigReader.ParseTxtConfigFile(AppValues.LangFilePath, ":", out errorString);
            if (!string.IsNullOrEmpty(errorString))
            {
                Utils.LogErrorAndExit(errorString);
            }
        }
        else
        {
            Utils.LogErrorAndExit(string.Format("错误:输入的lang文件不存在,路径为{0}", args[3]));
        }

        // 检查其他参数
        for (int i = 4; i < args.Length; ++i)
        {
            string param = args[i];
            switch (param)
            {
            case AppValues.UNCHECKED_PARAM_STRING:
            {
                AppValues.IsNeedCheck = false;
                Utils.LogWarning("警告:你选择了不进行表格检查,请务必自己保证表格的正确性");
                break;
            }

            case AppValues.NEED_COLUMN_INFO_PARAM_STRING:
            {
                AppValues.IsNeedColumnInfo = true;
                Utils.LogWarning("你选择了在生成的lua文件最上方用注释形式显示列信息");
                break;
            }

            case AppValues.LANG_NOT_MATCHING_PRINT_PARAM_STRING:
            {
                AppValues.IsPrintEmptyStringWhenLangNotMatching = true;
                Utils.LogWarning("你选择了当lang型数据key在lang文件中找不到对应值时,在lua文件输出字段值为空字符串");
                break;
            }

            default:
            {
                Utils.LogErrorAndExit(string.Format("错误:未知的指令参数{0}", param));
                break;
            }
            }
        }
        // 解析本工具所在目录下的config文件
        if (File.Exists(AppValues.CONFIG_FILE_NAME))
        {
            string errorString = null;
            AppValues.ConfigData = TxtConfigReader.ParseTxtConfigFile(AppValues.CONFIG_FILE_NAME, ":", out errorString);
            if (!string.IsNullOrEmpty(errorString))
            {
                Utils.LogErrorAndExit(errorString);
            }
        }
        else
        {
            Utils.LogWarning(string.Format("警告:找不到本工具所在路径下的{0}配置文件,请确定是否真的不需要自定义配置", AppValues.CONFIG_FILE_NAME));
        }

        // 读取给定的Excel所在目录下的所有Excel文件,然后解析成本工具所需的数据结构
        foreach (var filePath in Directory.GetFiles(AppValues.ExcelFolderPath, "*.xlsx"))
        {
            string  errorString = null;
            DataSet ds          = XlsxReader.ReadXlsxFile(filePath, out errorString);
            if (string.IsNullOrEmpty(errorString))
            {
                string    fileName  = Path.GetFileNameWithoutExtension(filePath);
                TableInfo tableInfo = TableAnalyzeHelper.AnalyzeTable(ds.Tables[AppValues.EXCEL_SHEET_NAME], fileName, out errorString);
                if (errorString != null)
                {
                    Utils.LogErrorAndExit(string.Format("错误:解析{0}失败\n{1}", filePath, errorString));
                }
                else
                {
                    // 如果有表格配置进行解析
                    if (ds.Tables[AppValues.EXCEL_CONFIG_NAME] != null)
                    {
                        tableInfo.TableConfig = TableAnalyzeHelper.GetTableConfig(ds.Tables[AppValues.EXCEL_CONFIG_NAME], out errorString);
                        if (!string.IsNullOrEmpty(errorString))
                        {
                            Utils.LogErrorAndExit(string.Format("错误:解析表格{0}的配置失败\n{1}", fileName, errorString));
                        }
                    }

                    AppValues.TableInfo.Add(tableInfo.TableName, tableInfo);
                }
            }
            else
            {
                Utils.LogErrorAndExit(string.Format("错误:读取{0}失败\n{1}", filePath, errorString));
            }
        }

        // 进行表格检查
        bool isTableAllRight = true;

        if (AppValues.IsNeedCheck == true)
        {
            Utils.Log("\n下面开始进行表格检查:");

            foreach (TableInfo tableInfo in AppValues.TableInfo.Values)
            {
                string errorString = null;
                Utils.Log(string.Format("检查表格\"{0}\":", tableInfo.TableName));
                TableCheckHelper.CheckTable(tableInfo, out errorString);
                if (errorString != null)
                {
                    Utils.LogError(errorString);
                    isTableAllRight = false;
                }
                else
                {
                    Utils.Log("正确");
                }
            }
        }
        if (isTableAllRight == true)
        {
            Utils.Log("\n表格检查完毕,没有发现错误,开始导出为lua文件\n");
            // 进行表格导出
            foreach (TableInfo tableInfo in AppValues.TableInfo.Values)
            {
                string errorString = null;
                Utils.Log(string.Format("导出表格\"{0}\":", tableInfo.TableName));
                bool isNeedExportOriginalTable = true;
                // 判断是否设置了特殊导出规则
                if (tableInfo.TableConfig != null && tableInfo.TableConfig.ContainsKey(AppValues.CONFIG_NAME_EXPORT))
                {
                    List <string> inputParams = tableInfo.TableConfig[AppValues.CONFIG_NAME_EXPORT];
                    if (inputParams.Contains(AppValues.CONFIG_PARAM_NOT_EXPORT_ORIGINAL_TABLE))
                    {
                        isNeedExportOriginalTable = false;
                        if (inputParams.Count == 1)
                        {
                            Utils.LogWarning(string.Format("警告:你设置了不对表格\"{0}\"按默认方式进行导出,而又没有指定任何其他自定义导出规则,本工具对此表格不进行任何导出,请确认是否真要如此", tableInfo.TableName));
                        }
                        else
                        {
                            Utils.Log("你设置了不对此表进行默认规则导出");
                        }
                    }
                    // 执行设置的特殊导出规则
                    foreach (string param in inputParams)
                    {
                        if (!AppValues.CONFIG_PARAM_NOT_EXPORT_ORIGINAL_TABLE.Equals(param, StringComparison.CurrentCultureIgnoreCase))
                        {
                            Utils.Log(string.Format("对此表格按\"{0}\"自定义规则进行导出:", param));
                            TableExportToLuaHelper.SpecialExportTableToLua(tableInfo, param, out errorString);
                            if (errorString != null)
                            {
                                Utils.LogErrorAndExit("导出失败:" + errorString);
                            }
                            else
                            {
                                Utils.Log("成功");
                            }
                        }
                    }
                }
                // 对表格按默认方式导出(除非通过参数设置不执行此操作)
                if (isNeedExportOriginalTable == true)
                {
                    TableExportToLuaHelper.ExportTableToLua(tableInfo, out errorString);
                    if (errorString != null)
                    {
                        Utils.LogErrorAndExit(errorString);
                    }
                    else
                    {
                        Utils.Log("按默认方式导出成功");
                    }
                }
            }

            Utils.Log("\n导出lua文件完毕\n");
        }
        else
        {
            Utils.LogError("\n表格检查完毕,但存在上面所列错误,必须全部修正后才可以进行表格导出\n");
            // 将错误信息全部输出保存到txt文件中
            Utils.SaveErrorInfoToFile();
        }

        Utils.Log("\n按任意键退出本工具");
        Console.ReadKey();
    }
Esempio n. 8
0
        private void btnLoadConfig_Click(object sender, EventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();

            dialog.Title            = "请选择配置文件所在路径";
            dialog.InitialDirectory = AppValues.PROGRAM_FOLDER_PATH;
            dialog.Multiselect      = false;
            dialog.Filter           = "Config files (*.txt)|*.txt";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                string errorString = null;
                Dictionary <string, string> config = TxtConfigReader.ParseTxtConfigFile(dialog.FileName, AppValues.SAVE_CONFIG_KEY_VALUE_SEPARATOR, out errorString);
                if (!string.IsNullOrEmpty(errorString))
                {
                    MessageBox.Show(string.Format("打开配置文件失败:\n{0}", errorString), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                if (config.ContainsKey(AppValues.SAVE_CONFIG_KEY_PROGRAM_PATH))
                {
                    tbProgramPath.Text = config[AppValues.SAVE_CONFIG_KEY_PROGRAM_PATH];
                }
                if (config.ContainsKey(AppValues.SAVE_CONFIG_KEY_EXCEL_FOLDER_PATH))
                {
                    tbExcelFolderPath.Text = config[AppValues.SAVE_CONFIG_KEY_EXCEL_FOLDER_PATH];
                }
                if (config.ContainsKey(AppValues.SAVE_CONFIG_KEY_EXPORT_LUA_FOLDER_PATH))
                {
                    tbExportLuaFolderPath.Text = config[AppValues.SAVE_CONFIG_KEY_EXPORT_LUA_FOLDER_PATH];
                }
                if (config.ContainsKey(AppValues.SAVE_CONFIG_KEY_CLIENT_FOLDER_PATH))
                {
                    tbClientFolderPath.Text = config[AppValues.SAVE_CONFIG_KEY_CLIENT_FOLDER_PATH];
                }
                if (config.ContainsKey(AppValues.SAVE_CONFIG_KEY_LANG_FILE_PATH))
                {
                    tbLangFilePath.Text = config[AppValues.SAVE_CONFIG_KEY_LANG_FILE_PATH];
                }
                if (config.ContainsKey(AppValues.NEED_COLUMN_INFO_PARAM_STRING))
                {
                    cbColumnInfo.CheckState = CheckState.Checked;
                }
                if (config.ContainsKey(AppValues.UNCHECKED_PARAM_STRING))
                {
                    cbUnchecked.CheckState = CheckState.Checked;
                }
                if (config.ContainsKey(AppValues.LANG_NOT_MATCHING_PRINT_PARAM_STRING))
                {
                    cbPrintEmptyStringWhenLangNotMatching.CheckState = CheckState.Checked;
                }
                if (config.ContainsKey(AppValues.EXPORT_MYSQL_PARAM_STRING))
                {
                    cbExportMySQL.CheckState = CheckState.Checked;
                }
                if (config.ContainsKey(AppValues.ALLOWED_NULL_NUMBER_PARAM_STRING))
                {
                    cbAllowedNullNumber.CheckState = CheckState.Checked;
                }
                if (config.ContainsKey(AppValues.PART_EXPORT_PARAM_STRING))
                {
                    cbPart.CheckState     = CheckState.Checked;
                    tbPartExcelNames.Text = config[AppValues.PART_EXPORT_PARAM_STRING];
                }

                MessageBox.Show("载入配置文件成功", "恭喜", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Esempio n. 9
0
    /// <summary>
    /// 传入参数中,第1个必须为Excel表格所在目录,第2个必须为存放导出lua文件的目录,第3个参数为项目Client目录的路径(无需文件存在型检查规则则填-noClient),第4个参数为必须为lang文件路径(没有填-noLang)
    /// 可附加参数有:
    /// 1) -columnInfo(在生成lua文件的最上方用注释形式显示列信息,默认不开启)
    /// 2) -unchecked(不对表格进行查错,不推荐使用)
    /// 3) -printEmptyStringWhenLangNotMatching(当lang型数据key在lang文件中找不到对应值时,在lua文件输出字段值为空字符串即xx = "",默认为输出nil)
    /// 4) -exportMySQL(将表格数据导出到MySQL数据库中,默认不导出)
    /// 5) -part(后面在英文小括号内声明本次要导出的Excel文件名,用|分隔,未声明的文件将被本工具忽略)
    /// </summary>
    static void Main(string[] args)
    {
        // 检查第1个参数(Excel表格所在目录)是否正确
        if (args.Length < 1)
        {
            Utils.LogErrorAndExit("错误:未输入Excel表格所在目录");
        }
        if (!Directory.Exists(args[0]))
        {
            Utils.LogErrorAndExit(string.Format("错误:输入的Excel表格所在目录不存在,路径为{0}", args[0]));
        }

        AppValues.ExcelFolderPath = Path.GetFullPath(args[0]);
        Utils.Log(string.Format("选择的Excel所在路径:{0}", AppValues.ExcelFolderPath));
        // 检查第2个参数(存放导出lua文件的目录)是否正确
        if (args.Length < 2)
        {
            Utils.LogErrorAndExit("错误:未输入要将生成lua文件存放的路径");
        }
        if (!Directory.Exists(args[1]))
        {
            Utils.LogErrorAndExit(string.Format("错误:输入的lua文件导出路径不存在,路径为{0}", args[1]));
        }

        AppValues.ExportLuaFilePath = Path.GetFullPath(args[1]);
        Utils.Log(string.Format("选择的lua文件导出路径:{0}", AppValues.ExportLuaFilePath));
        // 检查第3个参数(项目Client目录的路径)是否正确
        if (args.Length < 3)
        {
            Utils.LogErrorAndExit("错误:未输入项目Client目录的路径,如果不需要请输入参数-noClient");
        }
        if (AppValues.NO_CLIENT_PATH_STRING.Equals(args[2], StringComparison.CurrentCultureIgnoreCase))
        {
            Utils.LogWarning("警告:你选择了不指定Client文件夹路径,则本工具无法检查表格中填写的图片路径等对应的文件是否存在");
            AppValues.ClientPath = null;
        }
        else if (Directory.Exists(args[2]))
        {
            AppValues.ClientPath = Path.GetFullPath(args[2]);
            Utils.Log(string.Format("Client目录完整路径:{0}", AppValues.ClientPath));
        }
        else
        {
            Utils.LogErrorAndExit(string.Format("错误:请检查输入的Client路径是否正确{0}", args[2]));
        }

        // 检查第4个参数(lang文件路径)是否正确
        if (args.Length < 4)
        {
            Utils.LogErrorAndExit("错误:未输入lang文件路径或未声明不含lang文件(使用-noLang)");
        }
        if (AppValues.NO_LANG_PARAM_STRING.Equals(args[3], StringComparison.CurrentCultureIgnoreCase))
        {
            AppValues.LangFilePath = null;
            Utils.Log("选择的lang文件路径:无");
        }
        else if (File.Exists(args[3]))
        {
            AppValues.LangFilePath = Path.GetFullPath(args[3]);
            Utils.Log(string.Format("选择的lang文件路径:{0}", AppValues.LangFilePath));

            // 解析lang文件
            string errorString = null;
            AppValues.LangData = TxtConfigReader.ParseTxtConfigFile(AppValues.LangFilePath, ":", out errorString);
            if (!string.IsNullOrEmpty(errorString))
            {
                Utils.LogErrorAndExit(errorString);
            }
        }
        else
        {
            Utils.LogErrorAndExit(string.Format("错误:输入的lang文件不存在,路径为{0}", args[3]));
        }

        // 检查其他参数
        for (int i = 4; i < args.Length; ++i)
        {
            string param = args[i];

            if (param.Equals(AppValues.UNCHECKED_PARAM_STRING, StringComparison.CurrentCultureIgnoreCase))
            {
                AppValues.IsNeedCheck = false;
                Utils.LogWarning("警告:你选择了不进行表格检查,请务必自己保证表格的正确性");
            }
            else if (param.Equals(AppValues.NEED_COLUMN_INFO_PARAM_STRING, StringComparison.CurrentCultureIgnoreCase))
            {
                AppValues.IsNeedColumnInfo = true;
                Utils.LogWarning("你选择了在生成的lua文件最上方用注释形式显示列信息");
            }
            else if (param.Equals(AppValues.LANG_NOT_MATCHING_PRINT_PARAM_STRING, StringComparison.CurrentCultureIgnoreCase))
            {
                AppValues.IsPrintEmptyStringWhenLangNotMatching = true;
                Utils.LogWarning("你选择了当lang型数据key在lang文件中找不到对应值时,在lua文件输出字段值为空字符串");
            }
            else if (param.Equals(AppValues.EXPORT_MYSQL_PARAM_STRING, StringComparison.CurrentCultureIgnoreCase))
            {
                AppValues.IsExportMySQL = true;
                Utils.LogWarning("你选择了导出表格数据到MySQL数据库");
            }
            else if (param.StartsWith(AppValues.PART_EXPORT_PARAM_STRING, StringComparison.CurrentCultureIgnoreCase))
            {
                // 解析声明的本次要导出的Excel名
                int leftBracketIndex  = param.IndexOf('(');
                int rightBracketIndex = param.LastIndexOf(')');
                if (leftBracketIndex == -1 || rightBracketIndex == -1 || leftBracketIndex > rightBracketIndex)
                {
                    Utils.LogErrorAndExit(string.Format("错误:声明导出部分Excel表格的参数{0}后必须在英文小括号内声明Excel文件名", AppValues.PART_EXPORT_PARAM_STRING));
                }
                else
                {
                    string   fileNameString = param.Substring(leftBracketIndex + 1, rightBracketIndex - leftBracketIndex - 1).Trim();
                    string[] fileNames      = fileNameString.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
                    if (fileNames.Length < 1)
                    {
                        Utils.LogErrorAndExit(string.Format("错误:声明导出部分Excel表格的参数{0}后必须在英文小括号内声明至少一个Excel文件名", AppValues.PART_EXPORT_PARAM_STRING));
                    }

                    foreach (string fileName in fileNames)
                    {
                        AppValues.exportTableNames.Add(fileName.Trim());
                    }

                    // 检查指定导出的Excel文件是否存在(注意不能直接用File.Exists判断是否存在,因为Windows会忽略声明的Excel文件名与实际文件名的大小写差异)
                    List <string> existExcelFilePaths = new List <string>(Directory.GetFiles(AppValues.ExcelFolderPath, "*.xlsx"));
                    List <string> existExcelFileNames = new List <string>();
                    foreach (string filePath in existExcelFilePaths)
                    {
                        existExcelFileNames.Add(Path.GetFileNameWithoutExtension(filePath));
                    }

                    foreach (string exportExcelFileName in AppValues.exportTableNames)
                    {
                        if (!existExcelFileNames.Contains(exportExcelFileName))
                        {
                            Utils.LogErrorAndExit(string.Format("要求导出的Excel文件({0})不存在,请检查后重试并注意区分大小写", Utils.CombinePath(AppValues.ExcelFolderPath, string.Concat(exportExcelFileName, ".xlsx"))));
                        }
                    }

                    Utils.LogWarning(string.Format("警告:本次将仅检查并导出以下Excel文件:\n{0}\n", Utils.CombineString(AppValues.exportTableNames, ", ")));
                }
            }
            else if (param.StartsWith(AppValues.ALLOWED_NULL_NUMBER_PARAM_STRING, StringComparison.CurrentCultureIgnoreCase))
            {
                AppValues.IsAllowedNullNumber = true;
                Utils.LogWarning("警告:你选择了允许int、long、float字段中存在空值,建议为逻辑上不允许为空的数值型字段声明使用notEmpty检查规则");
            }
            else
            {
                Utils.LogErrorAndExit(string.Format("错误:未知的指令参数{0}", param));
            }
        }

        // 如果未指定导出部分Excel文件,则全部导出
        if (AppValues.exportTableNames.Count == 0)
        {
            foreach (string filePath in Directory.GetFiles(AppValues.ExcelFolderPath, "*.xlsx"))
            {
                AppValues.exportTableNames.Add(Path.GetFileNameWithoutExtension(filePath));
            }
        }

        // 解析本工具所在目录下的config文件
        string configFilePath = Utils.CombinePath(AppValues.PROGRAM_FOLDER_PATH, AppValues.CONFIG_FILE_NAME);

        if (File.Exists(configFilePath))
        {
            string errorString = null;
            AppValues.ConfigData = TxtConfigReader.ParseTxtConfigFile(configFilePath, ":", out errorString);
            if (!string.IsNullOrEmpty(errorString))
            {
                Utils.LogErrorAndExit(errorString);
            }
        }
        else
        {
            Utils.LogWarning(string.Format("警告:找不到本工具所在路径下的{0}配置文件,请确定是否真的不需要自定义配置", AppValues.CONFIG_FILE_NAME));
        }

        // 读取部分配置项并进行检查
        const string  ERROR_STRING_FORMAT = "配置项\"{0}\"所设置的值\"{1}\"非法:{2}\n";
        StringBuilder errorStringBuilder  = new StringBuilder();
        string        tempErrorString     = null;

        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_DEFAULT_DATE_INPUT_FORMAT))
        {
            AppValues.DefaultDateInputFormat = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_DEFAULT_DATE_INPUT_FORMAT].Trim();
            if (TableCheckHelper.CheckDateInputDefine(AppValues.DefaultDateInputFormat, out tempErrorString) == false)
            {
                errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, AppValues.APP_CONFIG_KEY_DEFAULT_DATE_INPUT_FORMAT, AppValues.DefaultDateInputFormat, tempErrorString);
            }
        }
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_DEFAULT_DATE_TO_LUA_FORMAT))
        {
            AppValues.DefaultDateToLuaFormat = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_DEFAULT_DATE_TO_LUA_FORMAT].Trim();
            if (TableCheckHelper.CheckDateToLuaDefine(AppValues.DefaultDateToLuaFormat, out tempErrorString) == false)
            {
                errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, AppValues.APP_CONFIG_KEY_DEFAULT_DATE_TO_LUA_FORMAT, AppValues.DefaultDateToLuaFormat, tempErrorString);
            }
        }
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_DEFAULT_DATE_TO_DATABASE_FORMAT))
        {
            AppValues.DefaultDateToDatabaseFormat = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_DEFAULT_DATE_TO_DATABASE_FORMAT].Trim();
            if (TableCheckHelper.CheckDateToDatabaseDefine(AppValues.DefaultDateToDatabaseFormat, out tempErrorString) == false)
            {
                errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, AppValues.APP_CONFIG_KEY_DEFAULT_DATE_TO_DATABASE_FORMAT, AppValues.DefaultDateToDatabaseFormat, tempErrorString);
            }
        }
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_DEFAULT_TIME_INPUT_FORMAT))
        {
            AppValues.DefaultTimeInputFormat = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_DEFAULT_TIME_INPUT_FORMAT].Trim();
            if (TableCheckHelper.CheckTimeDefine(AppValues.DefaultTimeInputFormat, out tempErrorString) == false)
            {
                errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, AppValues.APP_CONFIG_KEY_DEFAULT_TIME_INPUT_FORMAT, AppValues.DefaultTimeInputFormat, tempErrorString);
            }
        }
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_DEFAULT_TIME_TO_LUA_FORMAT))
        {
            AppValues.DefaultTimeToLuaFormat = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_DEFAULT_TIME_TO_LUA_FORMAT].Trim();
            if (TableCheckHelper.CheckTimeDefine(AppValues.DefaultTimeToLuaFormat, out tempErrorString) == false)
            {
                errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, AppValues.APP_CONFIG_KEY_DEFAULT_TIME_TO_LUA_FORMAT, AppValues.DefaultTimeToLuaFormat, tempErrorString);
            }
        }
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_DEFAULT_TIME_TO_DATABASE_FORMAT))
        {
            AppValues.DefaultTimeToDatabaseFormat = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_DEFAULT_TIME_TO_DATABASE_FORMAT].Trim();
            if (TableCheckHelper.CheckTimeDefine(AppValues.DefaultTimeToDatabaseFormat, out tempErrorString) == false)
            {
                errorStringBuilder.AppendFormat(ERROR_STRING_FORMAT, AppValues.APP_CONFIG_KEY_DEFAULT_TIME_TO_DATABASE_FORMAT, AppValues.DefaultTimeToDatabaseFormat, tempErrorString);
            }
        }

        // 读取给定的Excel所在目录下的所有Excel文件,然后解析成本工具所需的数据结构
        foreach (string filePath in Directory.GetFiles(AppValues.ExcelFolderPath, "*.xlsx"))
        {
            string  errorString = null;
            DataSet ds          = XlsxReader.ReadXlsxFile(filePath, out errorString);
            if (string.IsNullOrEmpty(errorString))
            {
                string    fileName  = Path.GetFileNameWithoutExtension(filePath);
                TableInfo tableInfo = TableAnalyzeHelper.AnalyzeTable(ds.Tables[AppValues.EXCEL_DATA_SHEET_NAME], fileName, out errorString);
                if (errorString != null)
                {
                    Utils.LogErrorAndExit(string.Format("错误:解析{0}失败\n{1}", filePath, errorString));
                }
                else
                {
                    // 如果有表格配置进行解析
                    if (ds.Tables[AppValues.EXCEL_CONFIG_SHEET_NAME] != null)
                    {
                        tableInfo.TableConfig = TableAnalyzeHelper.GetTableConfig(ds.Tables[AppValues.EXCEL_CONFIG_SHEET_NAME], out errorString);
                        if (!string.IsNullOrEmpty(errorString))
                        {
                            Utils.LogErrorAndExit(string.Format("错误:解析表格{0}的配置失败\n{1}", fileName, errorString));
                        }
                    }

                    AppValues.TableInfo.Add(tableInfo.TableName, tableInfo);
                }
            }
            else
            {
                Utils.LogErrorAndExit(string.Format("错误:读取{0}失败\n{1}", filePath, errorString));
            }
        }

        // 进行表格检查
        bool isTableAllRight = true;

        if (AppValues.IsNeedCheck == true)
        {
            Utils.Log("\n下面开始进行表格检查:");

            foreach (string tableName in AppValues.exportTableNames)
            {
                TableInfo tableInfo   = AppValues.TableInfo[tableName];
                string    errorString = null;
                Utils.Log(string.Format("检查表格\"{0}\":", tableInfo.TableName));
                TableCheckHelper.CheckTable(tableInfo, out errorString);
                if (errorString != null)
                {
                    Utils.LogError(errorString);
                    isTableAllRight = false;
                }
                else
                {
                    Utils.Log("正确");
                }
            }
        }
        if (isTableAllRight == true)
        {
            Utils.Log("\n表格检查完毕,没有发现错误,开始导出为lua文件\n");
            // 进行表格导出
            foreach (string tableName in AppValues.exportTableNames)
            {
                TableInfo tableInfo   = AppValues.TableInfo[tableName];
                string    errorString = null;
                Utils.Log(string.Format("导出表格\"{0}\":", tableInfo.TableName));
                bool isNeedExportOriginalTable = true;
                // 判断是否设置了特殊导出规则
                if (tableInfo.TableConfig != null && tableInfo.TableConfig.ContainsKey(AppValues.CONFIG_NAME_EXPORT))
                {
                    List <string> inputParams = tableInfo.TableConfig[AppValues.CONFIG_NAME_EXPORT];
                    if (inputParams.Contains(AppValues.CONFIG_PARAM_NOT_EXPORT_ORIGINAL_TABLE))
                    {
                        isNeedExportOriginalTable = false;
                        if (inputParams.Count == 1)
                        {
                            Utils.LogWarning(string.Format("警告:你设置了不对表格\"{0}\"按默认方式进行导出,而又没有指定任何其他自定义导出规则,本工具对此表格不进行任何导出,请确认是否真要如此", tableInfo.TableName));
                        }
                        else
                        {
                            Utils.Log("你设置了不对此表进行默认规则导出");
                        }
                    }
                    // 执行设置的特殊导出规则
                    foreach (string param in inputParams)
                    {
                        if (!AppValues.CONFIG_PARAM_NOT_EXPORT_ORIGINAL_TABLE.Equals(param, StringComparison.CurrentCultureIgnoreCase))
                        {
                            Utils.Log(string.Format("对此表格按\"{0}\"自定义规则进行导出:", param));
                            TableExportToLuaHelper.SpecialExportTableToLua(tableInfo, param, out errorString);
                            if (errorString != null)
                            {
                                Utils.LogErrorAndExit(string.Format("导出失败:\n{0}\n", errorString));
                            }
                            else
                            {
                                Utils.Log("成功");
                            }
                        }
                    }
                }
                // 对表格按默认方式导出(除非通过参数设置不执行此操作)
                if (isNeedExportOriginalTable == true)
                {
                    TableExportToLuaHelper.ExportTableToLua(tableInfo, out errorString);
                    if (errorString != null)
                    {
                        Utils.LogErrorAndExit(errorString);
                    }
                    else
                    {
                        Utils.Log("按默认方式导出成功");
                    }
                }
            }

            Utils.Log("\n导出lua文件完毕\n");

            // 进行数据库导出
            if (AppValues.IsExportMySQL == true)
            {
                Utils.Log("\n导出表格数据到MySQL数据库\n");

                string errorString = null;
                TableExportToMySQLHelper.ConnectToDatabase(out errorString);
                if (!string.IsNullOrEmpty(errorString))
                {
                    Utils.LogErrorAndExit(string.Format("无法连接至MySQL数据库:{0}\n导出至MySQL数据库被迫中止,请修正错误后重试\n", errorString));
                }

                foreach (string tableName in AppValues.exportTableNames)
                {
                    TableInfo tableInfo = AppValues.TableInfo[tableName];
                    TableExportToMySQLHelper.ExportTableToDatabase(tableInfo, out errorString);
                    if (!string.IsNullOrEmpty(errorString))
                    {
                        Utils.LogErrorAndExit(string.Format("导出失败:{0}\n导出至MySQL数据库被迫中止,请修正错误后重试\n", errorString));
                    }
                }

                Utils.Log("\n导出到数据库完毕\n");
            }
        }
        else
        {
            Utils.LogError("\n表格检查完毕,但存在上面所列错误,必须全部修正后才可以进行表格导出\n");
            // 将错误信息全部输出保存到txt文件中
            Utils.SaveErrorInfoToFile();
        }

        Utils.Log("\n按任意键退出本工具");
        Console.ReadKey();
    }
Esempio n. 10
0
    /// <summary>
    /// 传入参数中,第1个必须为Excel表格所在目录,第2个必须为存放导出lua文件的目录,第3个参数为项目Client目录的路径(无需文件存在型检查规则则填-noClient),第4个参数为必须为lang文件路径(没有填-noLang)
    /// 可附加参数为:-columnInfo(在生成lua文件的最上方用注释形式显示列信息,默认不开启),-unchecked(不对表格进行查错,不推荐使用),-printEmptyStringWhenLangNotMatching(当lang型数据key在lang文件中找不到对应值时,在lua文件输出字段值为空字符串即xx = "",默认为输出nil)
    /// </summary>
    static void Main(string[] args)
    {
        // 检查第1个参数(Excel表格所在目录)是否正确
        if (args.Length < 1)
        {
            Utils.LogErrorAndExit("错误:未输入Excel表格所在目录");
        }
        if (!Directory.Exists(args[0]))
        {
            Utils.LogErrorAndExit(string.Format("错误:输入的Excel表格所在目录不存在,路径为{0}", args[0]));
        }

        AppValues.ExcelFolderPath = Path.GetFullPath(args[0]);
        Utils.Log(string.Format("选择的Excel所在路径:{0}", AppValues.ExcelFolderPath));
        // 检查第2个参数(存放导出lua文件的目录)是否正确
        if (args.Length < 2)
        {
            Utils.LogErrorAndExit("错误:未输入要将生成lua文件存放的路径");
        }
        if (!Directory.Exists(args[1]))
        {
            Utils.LogErrorAndExit(string.Format("错误:输入的lua文件导出路径不存在,路径为{0}", args[1]));
        }

        AppValues.ExportLuaFilePath = Path.GetFullPath(args[1]);
        Utils.Log(string.Format("选择的lua文件导出路径:{0}", AppValues.ExportLuaFilePath));
        // 检查第3个参数(项目Client目录的路径)是否正确
        if (args.Length < 3)
        {
            Utils.LogErrorAndExit("错误:未输入项目Client目录的路径,如果不需要请输入参数-noClient");
        }
        if (AppValues.NO_CLIENT_PATH_STRING.Equals(args[2], StringComparison.CurrentCultureIgnoreCase))
        {
            Utils.LogWarning("警告:你选择了不指定Client文件夹路径,则本工具无法检查表格中填写的图片路径等对应的文件是否存在");
            AppValues.ClientPath = null;
        }
        else if (Directory.Exists(args[2]))
        {
            AppValues.ClientPath = Path.GetFullPath(args[2]);
            Utils.Log(string.Format("Client目录完整路径:{0}", AppValues.ClientPath));
        }
        else
        {
            Utils.LogErrorAndExit(string.Format("错误:请检查输入的Client路径是否正确{0}", args[2]));
        }

        // 检查第4个参数(lang文件路径)是否正确
        if (args.Length < 4)
        {
            Utils.LogErrorAndExit("错误:未输入lang文件路径或未声明不含lang文件(使用-noLang)");
        }
        if (AppValues.NO_LONG_PARAM_STRING.Equals(args[3], StringComparison.CurrentCultureIgnoreCase))
        {
            AppValues.LangFilePath = null;
            Utils.Log("选择的lang文件路径:无");
        }
        else if (File.Exists(args[3]))
        {
            AppValues.LangFilePath = Path.GetFullPath(args[3]);
            Utils.Log(string.Format("选择的lang文件路径:{0}", AppValues.LangFilePath));

            // 解析lang文件
            string errorString = null;
            AppValues.LangData = TxtConfigReader.ParseTxtConfigFile(AppValues.LangFilePath, ":", out errorString);
            if (!string.IsNullOrEmpty(errorString))
            {
                Utils.LogErrorAndExit(errorString);
            }
        }
        else
        {
            Utils.LogErrorAndExit(string.Format("错误:输入的lang文件不存在,路径为{0}", args[3]));
        }

        // 检查其他参数
        for (int i = 4; i < args.Length; ++i)
        {
            string param = args[i];
            switch (param)
            {
            case AppValues.UNCHECKED_PARAM_STRING:
            {
                AppValues.IsNeedCheck = false;
                Utils.LogWarning("警告:你选择了不进行表格检查,请务必自己保证表格的正确性");
                break;
            }

            case AppValues.NEED_COLUMN_INFO_PARAM_STRING:
            {
                AppValues.IsNeedColumnInfo = true;
                Utils.LogWarning("你选择了在生成的lua文件最上方用注释形式显示列信息");
                break;
            }

            case AppValues.LANG_NOT_MATCHING_PRINT_PARAM_STRING:
            {
                AppValues.IsPrintEmptyStringWhenLangNotMatching = true;
                Utils.LogWarning("你选择了当lang型数据key在lang文件中找不到对应值时,在lua文件输出字段值为空字符串");
                break;
            }

            default:
            {
                Utils.LogErrorAndExit(string.Format("错误:未知的指令参数{0}", param));
                break;
            }
            }
        }
        // 解析本工具所在目录下的config文件
        if (File.Exists(AppValues.CONFIG_FILE_NAME))
        {
            string errorString = null;
            AppValues.ConfigData = TxtConfigReader.ParseTxtConfigFile(AppValues.CONFIG_FILE_NAME, ":", out errorString);
            if (!string.IsNullOrEmpty(errorString))
            {
                Utils.LogErrorAndExit(errorString);
            }
        }
        else
        {
            Utils.LogWarning(string.Format("警告:找不到本工具所在路径下的{0}配置文件,请确定是否真的不需要自定义配置", AppValues.CONFIG_FILE_NAME));
        }

        // 读取给定的Excel所在目录下的所有Excel文件,然后解析成本程序所需的数据结构
        foreach (var filePath in Directory.GetFiles(AppValues.ExcelFolderPath, "*.xlsx"))
        {
            string    errorString = null;
            DataTable dt          = XlsxReader.ReadXlsxFile(filePath, out errorString);
            if (string.IsNullOrEmpty(errorString))
            {
                string    fileName  = Path.GetFileNameWithoutExtension(filePath);
                TableInfo tableInfo = TableAnalyzeHelper.AnalyzeTable(dt, fileName, out errorString);
                if (errorString != null)
                {
                    Utils.LogErrorAndExit(string.Format("错误:解析{0}失败\n{1}", filePath, errorString));
                }
                else
                {
                    AppValues.TableInfo.Add(tableInfo.TableName, tableInfo);
                }
            }
            else
            {
                Utils.LogErrorAndExit(string.Format("错误:读取{0}失败\n{1}", filePath, errorString));
            }
        }

        // 进行表格检查
        bool isTableAllRight = true;

        if (AppValues.IsNeedCheck == true)
        {
            Utils.Log("\n下面开始进行表格检查:");

            foreach (TableInfo tableInfo in AppValues.TableInfo.Values)
            {
                string errorString = null;
                Utils.Log(string.Format("检查表格\"{0}\":", tableInfo.TableName));
                TableCheckHelper.CheckTable(tableInfo, out errorString);
                if (errorString != null)
                {
                    Utils.LogError(errorString);
                    isTableAllRight = false;
                }
                else
                {
                    Utils.Log("正确");
                }
            }
        }
        if (isTableAllRight == true)
        {
            Utils.Log("\n表格检查完毕,没有发现错误,开始导出为lua文件\n");
            // 进行表格导出
            foreach (TableInfo tableInfo in AppValues.TableInfo.Values)
            {
                string errorString = null;
                TableExportToLuaHelper.ExportTableToLua(tableInfo, out errorString);
                if (errorString != null)
                {
                    Utils.LogErrorAndExit(errorString);
                }
            }

            Utils.Log("\n导出lua文件完毕\n");
        }
        else
        {
            Utils.LogError("\n表格检查完毕,但存在上面所列错误,必须全部修正后才可以进行表格导出\n");
            // 将错误信息全部输出保存到txt文件中
            Utils.SaveErrorInfoToFile();
        }

        Utils.Log("\n按任意键退出本程序");
        Console.ReadKey();
    }
Esempio n. 11
0
        private void btnLoadConfig_Click(object sender, EventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();

            dialog.Title            = "请选择配置文件所在路径";
            dialog.InitialDirectory = AppValues.PROGRAM_FOLDER_PATH;
            dialog.Multiselect      = false;
            dialog.Filter           = "Config files (*.txt)|*.txt";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                string errorString = null;
                Dictionary <string, string> config = TxtConfigReader.ParseTxtConfigFile(dialog.FileName, AppValues.SAVE_CONFIG_KEY_VALUE_SEPARATOR, out errorString);
                if (!string.IsNullOrEmpty(errorString))
                {
                    MessageBox.Show(string.Format("打开配置文件失败:\n{0}", errorString), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                if (config.ContainsKey(AppValues.SAVE_CONFIG_KEY_PROGRAM_PATH))
                {
                    tbProgramPath.Text = config[AppValues.SAVE_CONFIG_KEY_PROGRAM_PATH];
                }
                if (config.ContainsKey(AppValues.SAVE_CONFIG_KEY_EXCEL_FOLDER_PATH))
                {
                    tbExcelFolderPath.Text = config[AppValues.SAVE_CONFIG_KEY_EXCEL_FOLDER_PATH];
                }
                if (config.ContainsKey(AppValues.SAVE_CONFIG_KEY_EXPORT_LUA_FOLDER_PATH))
                {
                    tbExportLuaFolderPath.Text = config[AppValues.SAVE_CONFIG_KEY_EXPORT_LUA_FOLDER_PATH];
                }
                if (config.ContainsKey(AppValues.SAVE_CONFIG_KEY_CLIENT_FOLDER_PATH))
                {
                    tbClientFolderPath.Text = config[AppValues.SAVE_CONFIG_KEY_CLIENT_FOLDER_PATH];
                }
                if (config.ContainsKey(AppValues.SAVE_CONFIG_KEY_LANG_FILE_PATH))
                {
                    tbLangFilePath.Text = config[AppValues.SAVE_CONFIG_KEY_LANG_FILE_PATH];
                }
                if (config.ContainsKey(AppValues.NEED_COLUMN_INFO_PARAM_STRING))
                {
                    cbColumnInfo.Checked = true;
                }
                if (config.ContainsKey(AppValues.UNCHECKED_PARAM_STRING))
                {
                    cbUnchecked.Checked = true;
                }
                if (config.ContainsKey(AppValues.LANG_NOT_MATCHING_PRINT_PARAM_STRING))
                {
                    cbPrintEmptyStringWhenLangNotMatching.Checked = true;
                }
                if (config.ContainsKey(AppValues.EXPORT_MYSQL_PARAM_STRING))
                {
                    cbExportMySQL.Checked = true;
                }
                if (config.ContainsKey(AppValues.ALLOWED_NULL_NUMBER_PARAM_STRING))
                {
                    cbAllowedNullNumber.Checked = true;
                }
                if (config.ContainsKey(AppValues.PART_EXPORT_PARAM_STRING))
                {
                    tbPartExcelNames.Text = config[AppValues.PART_EXPORT_PARAM_STRING];
                }
                if (config.ContainsKey(AppValues.EXPORT_CSV_PARAM_STRING))
                {
                    tbExportCsvTableNames.Text = config[AppValues.EXPORT_CSV_PARAM_STRING];
                }
                if (config.ContainsKey(AppValues.EXPORT_JSON_PARAM_STRING))
                {
                    tbExportJsonTableNames.Text = config[AppValues.EXPORT_JSON_PARAM_STRING];
                }

                string exportCsvFilePathKey = string.Concat(AppValues.EXPORT_CSV_PARAM_PARAM_STRING, AppValues.SAVE_CONFIG_PARAM_SUBTYPE_SEPARATOR, AppValues.EXPORT_CSV_PARAM_SUBTYPE_EXPORT_PATH);
                if (config.ContainsKey(exportCsvFilePathKey))
                {
                    tbExportCsvFilePath.Text = config[exportCsvFilePathKey];
                }

                string csvFileExtensionKey = string.Concat(AppValues.EXPORT_CSV_PARAM_PARAM_STRING, AppValues.SAVE_CONFIG_PARAM_SUBTYPE_SEPARATOR, AppValues.EXPORT_CSV_PARAM_SUBTYPE_EXTENSION);
                if (config.ContainsKey(csvFileExtensionKey))
                {
                    tbCsvFileExtension.Text = config[csvFileExtensionKey];
                }

                string csvFileSplitStringKey = string.Concat(AppValues.EXPORT_CSV_PARAM_PARAM_STRING, AppValues.SAVE_CONFIG_PARAM_SUBTYPE_SEPARATOR, AppValues.EXPORT_CSV_PARAM_SUBTYPE_SPLIT_STRING);
                if (config.ContainsKey(csvFileSplitStringKey))
                {
                    tbCsvFileSplitString.Text = config[csvFileSplitStringKey];
                }

                string exportJsonFilePathKey = string.Concat(AppValues.EXPORT_JSON_PARAM_PARAM_STRING, AppValues.SAVE_CONFIG_PARAM_SUBTYPE_SEPARATOR, AppValues.EXPORT_JSON_PARAM_SUBTYPE_EXPORT_PATH);
                if (config.ContainsKey(exportJsonFilePathKey))
                {
                    tbExportJsonFilePath.Text = config[exportJsonFilePathKey];
                }

                string jsonFileExtensionKey = string.Concat(AppValues.EXPORT_JSON_PARAM_PARAM_STRING, AppValues.SAVE_CONFIG_PARAM_SUBTYPE_SEPARATOR, AppValues.EXPORT_JSON_PARAM_SUBTYPE_EXTENSION);
                if (config.ContainsKey(jsonFileExtensionKey))
                {
                    tbJsonFileExtension.Text = config[jsonFileExtensionKey];
                }

                cbPart.Checked       = config.ContainsKey(AppValues.SAVE_CONFIG_KEY_IS_CHECKED_PART);
                cbExportCsv.Checked  = config.ContainsKey(AppValues.SAVE_CONFIG_KEY_IS_CHECKED_EXPORT_CSV);
                cbExportJson.Checked = config.ContainsKey(AppValues.SAVE_CONFIG_KEY_IS_CHECKED_EXPORT_JSON);
                string isExportCsvColumnNameKey = string.Concat(AppValues.EXPORT_CSV_PARAM_PARAM_STRING, AppValues.SAVE_CONFIG_PARAM_SUBTYPE_SEPARATOR, AppValues.EXPORT_CSV_PARAM_SUBTYPE_IS_EXPORT_COLUMN_NAME);
                cbIsExportCsvColumnName.Checked = config.ContainsKey(isExportCsvColumnNameKey);
                string isExportCsvColumnDataTypeKey = string.Concat(AppValues.EXPORT_CSV_PARAM_PARAM_STRING, AppValues.SAVE_CONFIG_PARAM_SUBTYPE_SEPARATOR, AppValues.EXPORT_CSV_PARAM_SUBTYPE_IS_EXPORT_COLUMN_DATA_TYPE);
                cbIsExportCsvColumnDataType.Checked = config.ContainsKey(isExportCsvColumnDataTypeKey);
                string isExportJsonWithFormatKey = string.Concat(AppValues.EXPORT_JSON_PARAM_PARAM_STRING, AppValues.SAVE_CONFIG_PARAM_SUBTYPE_SEPARATOR, AppValues.EXPORT_JSON_PARAM_SUBTYPE_IS_FORMAT);
                cbIsExportJsonWithFormat.Checked = config.ContainsKey(isExportJsonWithFormatKey);

                MessageBox.Show("载入配置文件成功", "恭喜", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }