Пример #1
0
 /// <summary>
 /// 微信认证
 /// https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx24e47efa56c2e554&redirect_uri=http%3a%2f%2fmap.lywenkai.cn%2fWeChatManage%2fWeiXinHome%2fRedirect&response_type=code&scope=snsapi_userinfo&state=http%3a%2f%2fmap.lywenkai.cn%2fWeChatManage%2fLogin%2fIndex#wechat_redirect
 /// </summary>
 /// <param name="code">snsapi_userinfo</param>
 /// <param name="state">回调url</param>
 /// <returns></returns>
 public ActionResult Redirect(string code, string state)
 {
     LogHelper.AddLog($"微信认证请求地址:{System.Web.HttpContext.Current.Request.Url.ToString()}  参数code: {code},参数state: {state}");
     //若用户禁止授权,则重定向后不会带上code参数
     if (string.IsNullOrEmpty(code))
     {
         return(Redirect(state));
     }
     else
     {
         WeixinToken token = new WeixinToken();
         //判断是否保存微信token,用户网页授权,不限制
         if (Session[WebSiteConfig.WXTOKEN_SESSION_NAME] != null)
         {
             token = Session[WebSiteConfig.WXTOKEN_SESSION_NAME] as WeixinToken;
         }
         else
         {
             string tokenUrl = string.Format(WeixinConfig.GetTokenUrl2, code);
             LogHelper.AddLog($"请求tokenUrl地址: {tokenUrl}");
             token = AnalyzeHelper.Get <WeixinToken>(tokenUrl);
             if (token.errcode != null)
             {
                 return(Content("网页授权Error:" + token.errcode + ":" + token.errmsg));
             }
             Session[WebSiteConfig.WXTOKEN_SESSION_NAME] = token;
         }
         Session["OpenId"] = token.openid;//进行登录
         LogHelper.AddLog($"token.openid: {Session["OpenId"]}");
         //查询用户是否存在
         var userEntity = wechatUserBll.GetEntity(token.openid);
         if (userEntity == null)
         {
             string userInfoUrl = string.Format(WeixinConfig.GetUserInfoUrl2, token.access_token, token.openid);
             var    userInfo    = AnalyzeHelper.Get <WeixinUserInfo>(userInfoUrl);
             if (userInfo.errcode != null)
             {
                 Response.Write(userInfo.errcode + ":" + userInfo.errmsg);
                 Response.End();
             }
             else
             {
                 userEntity = new WeChat_UsersEntity()
                 {
                     City       = userInfo.city,
                     Country    = userInfo.country,
                     HeadimgUrl = userInfo.headimgurl,
                     NickName   = userInfo.nickname,
                     OpenId     = userInfo.openid,
                     Province   = userInfo.province,
                     Sex        = userInfo.sex,
                     AppName    = Config.GetValue("AppName2")
                 };
                 wechatUserBll.SaveForm("", userEntity);
             }
         }
         Session[WebSiteConfig.WXUSER_SESSION_NAME] = userEntity;
         return(Redirect(state));
     }
 }
Пример #2
0
    public static void OptiEffects(List <AnalyzeObject> result)
    {
        List <GameObject> effects = new List <GameObject>();

        AnalyzeHelper.GetAllPrefabs(AnalyzeConfig.EffectPath, effects);
        List <Material> mats = new List <Material>();

        for (int i = 0; i < effects.Count; i++)
        {
            mats.Clear();
            Transform[]           trans = effects[i].GetComponentsInChildren <Transform>();
            SkinnedMeshRenderer[] smrs  = effects[i].GetComponentsInChildren <SkinnedMeshRenderer>();
            MeshFilter[]          mfs   = effects[i].GetComponentsInChildren <MeshFilter>();
            MeshRenderer[]        mrs   = effects[i].GetComponentsInChildren <MeshRenderer>();
            ParticleSystem[]      pss   = effects[i].GetComponentsInChildren <ParticleSystem>();
            AnalyzeHelper.GetMats(smrs, mats);
            AnalyzeHelper.GetMats(mrs, mats);
            AnalyzeHelper.GetMats(pss, mats);
            int           tris = AnalyzeHelper.GetTris(smrs) + AnalyzeHelper.GetTris(mfs) + AnalyzeHelper.GetTris(pss);
            AnalyzeEffect opt  = new AnalyzeEffect();
            opt.Prefab     = effects[i];
            opt.MeshCount  = smrs.Length + mfs.Length;
            opt.TransCount = trans.Length - 1;
            opt.Materials  = mats.Count;
            opt.Particles  = pss.Length;
            opt.Tris       = tris;
            result.Add(opt);
        }

        result.Sort(delegate(AnalyzeObject m1, AnalyzeObject m2)
        {
            return((m2 as AnalyzeEffect).Particles.CompareTo((m1 as AnalyzeEffect).Particles));
        });
    }
Пример #3
0
        //跳转
        public ActionResult Redirect(string code, string state)
        {
            //若用户禁止授权,则重定向后不会带上code参数
            if (string.IsNullOrEmpty(code))
            {
                return(Redirect(state));
            }
            else
            {
                WeixinToken token = new WeixinToken();

                //判断是否保存微信token
                if (Session[WebSiteConfig.WXTOKEN_SESSION_NAME] != null)
                {
                    token = Session[WebSiteConfig.WXTOKEN_SESSION_NAME] as WeixinToken;
                }
                else
                {
                    string tokenUrl = string.Format(WeixinConfig.GetTokenUrl, code);
                    token = AnalyzeHelper.Get <WeixinToken>(tokenUrl);
                    if (token.errcode != null)
                    {
                        return(Content(token.errcode + ":" + token.errmsg));
                    }
                    Session[WebSiteConfig.WXTOKEN_SESSION_NAME] = token;
                }
                //查询用户是否存在
                var userEntity = userBll.GetEntity(token.openid);
                if (userEntity == null)
                {
                    string userInfoUrl = string.Format(WeixinConfig.GetUserInfoUrl, token.access_token, token.openid);
                    var    userInfo    = AnalyzeHelper.Get <WeixinUserInfo>(userInfoUrl);
                    if (userInfo.errcode != null)
                    {
                        Response.Write(userInfo.errcode + ":" + userInfo.errmsg);
                        Response.End();
                    }
                    else
                    {
                        userEntity = new WeChat_UsersEntity()
                        {
                            City       = userInfo.city,
                            Country    = userInfo.country,
                            HeadimgUrl = userInfo.headimgurl,
                            NickName   = userInfo.nickname,
                            OpenId     = userInfo.openid,
                            Province   = userInfo.province,
                            Sex        = userInfo.sex,
                            AppName    = WeixinConfig.AppName
                        };
                        userBll.SaveForm("", userEntity);
                    }
                }
                Session[WebSiteConfig.WXUSER_SESSION_NAME] = userEntity;
                return(Redirect(state));
            }
        }
Пример #4
0
        // 点击“打开Excel母表”按钮
        private void btnOpenExcelFile_Click(object sender, EventArgs e)
        {
            string excelFilePath = txtExcelPath.Text.Trim();

            if (string.IsNullOrEmpty(excelFilePath))
            {
                MessageBox.Show("请先输入或选择国际化Excel母表所在路径", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            FileState fileState = Utils.GetFileState(excelFilePath);

            if (fileState == FileState.Inexist)
            {
                MessageBox.Show("输入的国际化Excel母表所在路径不存在,建议点击\"选择\"按钮进行文件选择", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (!AppValues.EXCEL_FILE_EXTENSION.Equals(Path.GetExtension(excelFilePath), StringComparison.CurrentCultureIgnoreCase))
            {
                MessageBox.Show(string.Format("本工具仅支持读取扩展名为{0}的Excel文件", AppValues.EXCEL_FILE_EXTENSION), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (fileState == FileState.IsOpen)
            {
                MessageBox.Show("该Excel文件正被其他软件打开,请关闭后重试", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            // 读取设置的注释行开头字符
            _SetCommentLineStartChar();

            // 解析Excel母表
            string        errorString   = null;
            LangExcelInfo langExcelInfo = AnalyzeHelper.AnalyzeLangExcelFile(excelFilePath, AppValues.CommentLineStartChar, out errorString);

            if (errorString == null)
            {
                AppValues.ExcelFullPath = Path.GetFullPath(excelFilePath);
                // 当重新选择了Excel母表文件后重置窗口控件
                _ChangeStateWhenSetExcelPath(false);
                AppValues.LangExcelInfo = langExcelInfo;
                // 设置了合法的Excel母表后,可以使用各个子模块功能
                _ChangeStateWhenSetExcelPath(true);
            }
            else
            {
                MessageBox.Show(string.Format("选定的Excel母表存在以下错误,请修正后重试\n\n{0}", errorString), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
        }
Пример #5
0
    public override void Parse()
    {
        if (this.Dependencies != null)
        {
            this.Dependencies.Clear();
        }
        if (this.Standard != null)
        {
            this.Standard.Clear();
        }
        var scene = EditorSceneManager.GetSceneByName(this.Name);

        if (scene == null || !scene.IsValid())
        {
            EditorSceneManager.OpenScene(this.Path);
            scene = EditorSceneManager.GetSceneByName(this.Name);
        }
        if (scene != null && scene.IsValid())
        {
            GameObject[]    objs = scene.GetRootGameObjects();
            List <Material> mats = new List <Material>();
            int             tris = 0;
            for (int i = 0; i < objs.Length; i++)
            {
                SkinnedMeshRenderer[] smrs = objs[i].GetComponentsInChildren <SkinnedMeshRenderer>(true);
                MeshRenderer[]        mrs  = objs[i].GetComponentsInChildren <MeshRenderer>(true);
                MeshFilter[]          mfs  = objs[i].GetComponentsInChildren <MeshFilter>(true);
                AnalyzeHelper.GetMats(mrs, mats);
                AnalyzeHelper.GetMats(smrs, mats);
                tris += AnalyzeHelper.GetTris(mfs);
                tris += AnalyzeHelper.GetTris(smrs);
            }
            this.Dependencies = mats;
            this.Tris         = tris;
        }
        if (this.Dependencies == null)
        {
            this.Dependencies = new List <Material>();
        }

        for (int i = 0; i < this.Dependencies.Count; i++)
        {
            if (this.Dependencies[i] != null && this.Dependencies[i].shader != null && this.Dependencies[i].shader.name.StartsWith("Stand"))
            {
                this.Standard.Add(this.Dependencies[i]);
            }
        }
    }
Пример #6
0
    public static void OptiUI(List <AnalyzeObject> result)
    {
        List <GameObject> uis = new List <GameObject>();

        AnalyzeHelper.GetAllPrefabs(AnalyzeConfig.UIPath, uis);
        for (int i = 0; i < uis.Count; i++)
        {
            AnalyzeUI ui = new AnalyzeUI();
            ui.Prefab = uis[i];
            ui.Parse();
            result.Add(ui);
        }
        result.Sort(delegate(AnalyzeObject m1, AnalyzeObject m2)
        {
            return((m2 as AnalyzeUI).FileSize.CompareTo((m1 as AnalyzeUI).FileSize));
        });
    }
        public ActionResult Analyze(AnalyzeCaseViewModel model)
        {
            AnalysisResultModel resultModel = new AnalysisResultModel();

            if (ModelState.IsValid)
            {
                if (model.IsURL)
                {
                    if (!AnalyzeHelper.IsURLText(model.Text))
                    {
                        ModelState.AddModelError("Text", "Please type the URL in correct pattern: http://www.example.com");
                        return(View(model));
                    }

                    if (model.IsCheckingNumberOfWords)
                    {
                        resultModel.OccuredWords = _analyzeService.GetWordOccurrencesFromUrl(model.Text);
                    }
                    if (model.IsListingMetaTags)
                    {
                        resultModel.MetaTagWords = _analyzeService.GetMetaTagWordsFromUrl(model.Text);
                    }
                    if (model.IsListingExternalLinks)
                    {
                        resultModel.ExternalLinksList = _analyzeService.GetExternalLinksFromUrl(model.Text);
                    }
                }
                else
                {
                    if (model.IsCheckingNumberOfWords)
                    {
                        resultModel.OccuredWords = _analyzeService.GetWordOccurrencesFromText(model.Text);
                    }
                    if (model.IsListingMetaTags)
                    {
                        resultModel.MetaTagWords = _analyzeService.GetMetaTagWordsFromText(model.Text);
                    }
                    if (model.IsListingExternalLinks)
                    {
                        resultModel.ExternalLinksList = _analyzeService.GetExternalLinksFromText(model.Text);
                    }
                }
            }

            return(PartialView("AnalysisSummary", resultModel));
        }
Пример #8
0
    public static void OptiText(List <AnalyzeObject> result)
    {
        List <GameObject> uis = new List <GameObject>();

        AnalyzeHelper.GetAllPrefabs(AnalyzeConfig.UIPath, uis);
        for (int i = 0; i < uis.Count; i++)
        {
            Text[] texts = uis[i].GetComponentsInChildren <Text>(true);
            for (int j = 0; j < texts.Length; j++)
            {
                ParseOptiText(result, texts[j]);
            }
        }
        result.Sort(delegate(AnalyzeObject m1, AnalyzeObject m2)
        {
            return((m2 as AnalyzeText).Texts.Count.CompareTo((m1 as AnalyzeText).Texts.Count));
        });
    }
        public void IsURLText_Should_Return_False_When_URLPattern_False()
        {
            var dic = new Dictionary <string, bool>()
            {
                { "this", false },
                { "http://www.google.com", true },
                { "/page.aspx", false },
                { "//page.aspx", false },
                { "/httf/something", false },
                { "httf://something.cover.com", false },
            };

            foreach (var item in dic)
            {
                var actual   = AnalyzeHelper.IsURLText(item.Key);
                var expected = item.Value;
                Assert.AreEqual(expected, actual);
            }
        }
Пример #10
0
        //获得微信js sdk config
        protected BaseWxModel GetWxModel()
        {
            BaseWxModel model = new BaseWxModel();

            model.appid     = WeixinConfig.AppID;
            model.timestamp = JSSDKHelper.GetTimestamp();
            model.nonce     = JSSDKHelper.GetNoncestr();
            model.thisUrl   = Request.Url.ToString();//MyCommFun.getTotalUrl();

            //string ticket = JsApiTicketContainer.TryGetJsApiTicket(WeixinConfig.AppID, WeixinConfig.AppSecret);
            //https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

            var cacheTicket = CacheFactory.Cache().GetCache <string>("jsapi_ticket");

            if (cacheTicket == null)
            {
                //全局token
                var cacheToken = CacheFactory.Cache().GetCache <string>("access_token");
                if (cacheToken == null)
                {
                    var userInfoBase = AnalyzeHelper.Get <WeixinTokenBase>(WeixinConfig.GetTokenBaseUrl);
                    cacheToken = userInfoBase.access_token;
                    CacheFactory.Cache().WriteCache(cacheToken, "access_token", DateTime.Now.AddSeconds(7000));
                }

                string ticketUrl   = string.Format(WeixinConfig.GetTicketUrl, cacheToken);
                var    ticketModel = AnalyzeHelper.Get <WeixinTicket>(ticketUrl);
                cacheTicket = ticketModel.ticket;
                if (!string.IsNullOrEmpty(cacheTicket))
                {
                    CacheFactory.Cache().WriteCache(cacheTicket, "jsapi_ticket", DateTime.Now.AddSeconds(7000));
                }
            }

            JSSDKHelper jsHelper = new JSSDKHelper();
            //最后一个参数url,必须为当前的网址
            var signature = JSSDKHelper.GetSignature(cacheTicket, model.nonce, model.timestamp, model.thisUrl);

            model.signature = signature;
            return(model);
        }
Пример #11
0
    public static void OptiRole(List <AnalyzeObject> result)
    {
        List <GameObject> monsters = new List <GameObject>();

        AnalyzeHelper.GetAllPrefabs(AnalyzeConfig.RolePath, monsters);
        List <Material> mats = new List <Material>();

        for (int i = 0; i < monsters.Count; i++)
        {
            mats.Clear();
            Transform child = monsters[i].transform.Find("root");
            if (child == null)
            {
                child = monsters[i].transform.Find("Bip001");
            }
            if (child == null)
            {
                Debug.LogError(monsters[i] + " cant find root bone!");
                child = monsters[i].transform;
            }
            Transform[]           trans = child.GetComponentsInChildren <Transform>();
            SkinnedMeshRenderer[] smrs  = monsters[i].GetComponentsInChildren <SkinnedMeshRenderer>();
            AnalyzeHelper.GetMats(smrs, mats);
            int         tris = AnalyzeHelper.GetTris(smrs);
            AnalyzeRole opt  = new AnalyzeRole();
            opt.Tris   = tris;
            opt.Prefab = monsters[i];
            if (smrs.Length > 0 && smrs[0].sharedMaterial != null)
            {
                opt.Mat    = smrs[0].sharedMaterial;
                opt.Shader = smrs[0].sharedMaterial.shader;
            }
            result.Add(opt);
        }
        result.Sort(delegate(AnalyzeObject m1, AnalyzeObject m2)
        {
            return((m2 as AnalyzeRole).Tris.CompareTo((m1 as AnalyzeRole).Tris));
        });
    }
Пример #12
0
        /// <summary>
        /// 微信认证
        /// https://open.weixin.qq.com/connect/oauth2/authorize
        /// ?appid=wx24e47efa56c2e554
        /// &redirect_uri=http%3a%2f%2fmap.lywenkai.cn%2fWeChatManage%2fWeiXinHome%2fRedirect
        /// &response_type=code&scope=snsapi_userinfo
        /// &state=http%3a%2f%2fmap.lywenkai.cn%2fWeChatManage%2fLogin%2fIndex
        /// #wechat_redirect
        /// </summary>
        /// <param name="code">snsapi_userinfo</param>
        /// <param name="state">回调url</param>
        /// <returns></returns>
        public ActionResult Redirect(string code, string state)
        {
            //若用户禁止授权,则重定向后不会带上code参数
            if (string.IsNullOrEmpty(code))
            {
                return(Redirect(state));
            }
            else
            {
                WeixinToken token = new WeixinToken();
                //判断是否保存微信token,用户网页授权access_token,不限制,,拿到授权access_token和openid
                if (Session[WebSiteConfig.WXTOKEN_SESSION_NAME] != null)
                {
                    token = Session[WebSiteConfig.WXTOKEN_SESSION_NAME] as WeixinToken;
                }
                else
                {
                    string tokenUrl = string.Format(WeixinConfig.GetTokenUrl, code);
                    token = AnalyzeHelper.Get <WeixinToken>(tokenUrl);
                    if (token.errcode != null)
                    {
                        return(Content(token.errcode + ":" + token.errmsg));
                    }
                    Session[WebSiteConfig.WXTOKEN_SESSION_NAME] = token;
                }

                //查询用户是否存在
                var userEntity = wechatUserBll.GetEntity(token.openid);
                if (userEntity == null)
                {
                    #region CacheFactory方式获取token
                    ////全局token--基础access_token,每日限额2000
                    //var cacheToken = CacheFactory.Cache().GetCache<string>("access_token");
                    //if (cacheToken == null)
                    //{
                    //    var userInfoBase = AnalyzeHelper.Get<WeixinTokenBase>(WeixinConfig.GetTokenBaseUrl);
                    //    cacheToken = userInfoBase.access_token;
                    //    CacheFactory.Cache().WriteCache(cacheToken, "access_token", DateTime.Now.AddSeconds(7000));
                    //}
                    #endregion

                    //改成盛派容器获取基础token
                    string base_token = TemplateWxApp.getToken(); //获取AccessToken结果

                    string userInfoUrl = string.Format(WeixinConfig.GetUserInfoUrl, base_token, token.openid);
                    var    userInfo    = AnalyzeHelper.Get <WeixinUserInfo>(userInfoUrl);
                    if (userInfo.errcode != null)
                    {
                        Response.Write(userInfo.errcode + ":" + userInfo.errmsg);
                        Response.End();
                    }
                    else
                    {
                        LogHelper.AddLog("用户关注状态:" + userInfo.subscribe.ToString());
                        if (userInfo.subscribe != 1)
                        {
                            //未关注
                            //未关注先跳转关注https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU3MzczNTY4Mw==#wechat_redirect
                            //微信7.0之后限制,加载完成之后按钮一闪而逝,WeixinConfig.BizUrl,生成二维码,从微信打开该链接即可
                            return(RedirectToAction("Guanzhu", "Brand"));
                        }
                        userEntity = new WeChat_UsersEntity()
                        {
                            City       = userInfo.city,
                            Country    = userInfo.country,
                            HeadimgUrl = userInfo.headimgurl,
                            NickName   = userInfo.nickname,
                            OpenId     = userInfo.openid,
                            Province   = userInfo.province,
                            Sex        = userInfo.sex,
                            AppName    = Config.GetValue("AppName")
                        };
                        wechatUserBll.SaveForm("", userEntity);
                    }
                }
                Session[WebSiteConfig.WXUSER_SESSION_NAME] = userEntity;
                return(Redirect(state));
            }
        }
Пример #13
0
        // 点击“合并翻译完的Excel文件”按钮
        private void btnMergeTranslatedExcelFile_Click(object sender, EventArgs e)
        {
            // 检查是否指定了合法的合并后的Excel文件的保存路径
            string mergedExcelSavePath = txtMergedExcelPath.Text.Trim();

            if (string.IsNullOrEmpty(mergedExcelSavePath))
            {
                MessageBox.Show("必须输入合并后的Excel文件的保存路径", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (!AppValues.EXCEL_FILE_EXTENSION.Equals(Path.GetExtension(mergedExcelSavePath), StringComparison.CurrentCultureIgnoreCase))
            {
                MessageBox.Show(string.Format("合并后的Excel文件扩展名必须为{0}", AppValues.EXCEL_FILE_EXTENSION), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            // 检查要导出的后的Excel文件是否已存在且正被其他程序使用
            if (Utils.GetFileState(mergedExcelSavePath) == FileState.IsOpen)
            {
                MessageBox.Show("要覆盖的合并后的Excel文件正被其他程序打开,请关闭后重试", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            // 检查是否指定了合法的翻译完的Excel文件
            string translatedExcelPath = txtTranslatedExcelPath.Text.Trim();

            if (string.IsNullOrEmpty(translatedExcelPath))
            {
                MessageBox.Show("必须输入翻译完的Excel文件所在路径", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            FileState fileState = Utils.GetFileState(translatedExcelPath);

            if (fileState == FileState.Inexist)
            {
                MessageBox.Show("输入的翻译完的Excel文件所在路径不存在,建议点击\"选择\"按钮进行文件选择", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (!AppValues.EXCEL_FILE_EXTENSION.Equals(Path.GetExtension(translatedExcelPath), StringComparison.CurrentCultureIgnoreCase))
            {
                MessageBox.Show(string.Format("本工具仅支持读取扩展名为{0}的Excel文件", AppValues.EXCEL_FILE_EXTENSION), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (fileState == FileState.IsOpen)
            {
                MessageBox.Show("指定的翻译完的Excel文件正被其他软件打开,请关闭后重试", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            // 检查选择的翻译完的Excel文件和新版母表不能为同一个文件
            string translatedExcelFileFullPath = Path.GetFullPath(translatedExcelPath);

            if (translatedExcelFileFullPath.Equals(AppValues.ExcelFullPath))
            {
                MessageBox.Show("你选择的翻译完的Excel文件和新版母表是同一个文件", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            // 解析翻译完的Excel文件
            string        errorString         = null;
            LangExcelInfo translatedExcelInfo = AnalyzeHelper.AnalyzeLangExcelFile(translatedExcelPath, AppValues.CommentLineStartChar, out errorString);

            if (errorString != null)
            {
                MessageBox.Show(string.Format("选定的翻译完后的Excel文件存在以下错误,请修正后重试\n\n{0}", errorString), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            // 检查翻译完的Excel文件与新版母表的主语言名称是否相同
            string excelDefaultLanguageName           = AppValues.LangExcelInfo.DefaultLanguageInfo.Name;
            string translatedExcelDefaultLanguageName = translatedExcelInfo.DefaultLanguageInfo.Name;

            if (!excelDefaultLanguageName.Equals(translatedExcelDefaultLanguageName))
            {
                MessageBox.Show(string.Format("翻译完的Excel文件与新版母表的主语言名称不同,无法进行对比,请统一后重试\n新版母表中主语言名称:{0},翻译完的Excel文件中主语言名称:{1}", excelDefaultLanguageName, translatedExcelDefaultLanguageName), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            // 记录翻译完的Excel文件中存在的外语名
            List <string> translatedExcelFileOtherLanguageNames = new List <string>();
            // 检查翻译完的Excel文件中的外语在新版母表中是否都存在
            List <string> inexistentOtherLanguageName = new List <string>();

            foreach (string otherLanguageName in translatedExcelInfo.OtherLanguageInfo.Keys)
            {
                if (!AppValues.LangExcelInfo.OtherLanguageInfo.ContainsKey(otherLanguageName))
                {
                    inexistentOtherLanguageName.Add(otherLanguageName);
                }

                translatedExcelFileOtherLanguageNames.Add(otherLanguageName);
            }
            if (inexistentOtherLanguageName.Count > 0)
            {
                MessageBox.Show(string.Format("翻译完后的Excel文件中存在以下新版母表中不存在的外语名,无法进行合并\n{0}", Utils.CombineString <string>(inexistentOtherLanguageName, ",")), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            // 检查完毕执行合并功能并生成合并结果报告文件(保存路径与合并后的Excel文件相同)
            string reportExcelSavePath = Utils.CombinePath(Path.GetDirectoryName(mergedExcelSavePath), string.Format("合并报告 {0:yyyy年MM月dd日 HH时mm分ss秒}.xlsx", DateTime.Now));

            ExportExcelFileHelper.ExportMergedExcelFile(mergedExcelSavePath, reportExcelSavePath, AppValues.LangExcelInfo, translatedExcelInfo, translatedExcelFileOtherLanguageNames, out errorString);
            if (errorString == null)
            {
                DialogResult dialogResult = MessageBox.Show(string.Format("合并操作成功\n合并后的Excel文件存储路径为{0}\n报告文件存储路径为{1}\n\n点击“确定”按钮后将自动打开此报告文件", mergedExcelSavePath, reportExcelSavePath), "恭喜", MessageBoxButtons.OK, MessageBoxIcon.Information);
                if (dialogResult == DialogResult.OK)
                {
                    System.Diagnostics.Process.Start(reportExcelSavePath);
                }
            }
            else
            {
                errorString = string.Concat("合并操作失败:", errorString);
                MessageBox.Show(errorString, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Пример #14
0
        // 点击“打开旧版母表”按钮
        private void btnOpenOldExcelFile_Click(object sender, EventArgs e)
        {
            string excelFilePath = txtOldExcelPath.Text.Trim();

            if (string.IsNullOrEmpty(excelFilePath))
            {
                MessageBox.Show("请先输入或选择与新版母表对比的旧版国际化Excel母表所在路径", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            FileState fileState = Utils.GetFileState(excelFilePath);

            if (fileState == FileState.Inexist)
            {
                MessageBox.Show("输入的旧版国际化Excel母表所在路径不存在,建议点击\"选择\"按钮进行文件选择", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (!AppValues.EXCEL_FILE_EXTENSION.Equals(Path.GetExtension(excelFilePath), StringComparison.CurrentCultureIgnoreCase))
            {
                MessageBox.Show(string.Format("本工具仅支持读取扩展名为{0}的Excel文件", AppValues.EXCEL_FILE_EXTENSION), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (fileState == FileState.IsOpen)
            {
                MessageBox.Show("该Excel文件正被其他软件打开,请关闭后重试", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            // 检查选择的旧表和新表不能为同一个文件
            string oldExcelFileFullPath = Path.GetFullPath(excelFilePath);

            if (oldExcelFileFullPath.Equals(AppValues.ExcelFullPath))
            {
                MessageBox.Show("你选择的旧表和新表是同一个文件", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            // 解析旧版Excel母表
            string        errorString   = null;
            LangExcelInfo langExcelInfo = AnalyzeHelper.AnalyzeLangExcelFile(excelFilePath, AppValues.CommentLineStartChar, out errorString);

            if (errorString == null)
            {
                // 检查新旧母表的主语言名称是否相同
                string excelDefaultLanguageName    = AppValues.LangExcelInfo.DefaultLanguageInfo.Name;
                string oldExcelDefaultLanguageName = langExcelInfo.DefaultLanguageInfo.Name;
                if (!excelDefaultLanguageName.Equals(oldExcelDefaultLanguageName))
                {
                    MessageBox.Show(string.Format("新旧母表主语言名称不同,无法进行对比,请统一后重试\n新版母表中主语言名称:{0},旧版中主语言名称:{1}", excelDefaultLanguageName, oldExcelDefaultLanguageName), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                // 检查新旧母表的所有外语名称是否相同
                bool isMatchOtherLanguageInfo = true;
                if (AppValues.LangExcelInfo.OtherLanguageInfo.Count == langExcelInfo.OtherLanguageInfo.Count)
                {
                    foreach (var item in AppValues.LangExcelInfo.OtherLanguageInfo)
                    {
                        if (!langExcelInfo.OtherLanguageInfo.ContainsKey(item.Key))
                        {
                            isMatchOtherLanguageInfo = false;
                            break;
                        }
                    }
                }
                else
                {
                    isMatchOtherLanguageInfo = false;
                }

                if (isMatchOtherLanguageInfo == false)
                {
                    MessageBox.Show("新旧母表的所有外语种类个数或者名称不完全匹配,无法进行对比", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                AppValues.OldLangExcelInfo = langExcelInfo;
                // 设置了合法的旧版Excel母表后,可以使用对比功能下属的各个子模块功能
                _ChangeStateWhenSetOldExcelPath(true);
            }
            else
            {
                MessageBox.Show(string.Format("选定的旧版Excel母表存在以下错误,请修正后重试\n\n{0}", errorString), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
        }