Пример #1
0
    private void OutputExcel()
    {
        string outputPath = LocalSaveManager.GetString(outputSaveKey, "", false);

        if (outputPath == "")
        {
            EditorUtility.DisplayDialog("路径不能为空", "路径不能为空", "确定");
            return;
        }
        string   filePath = outputPath + "/" + excelName;
        FileInfo fileInfo = new FileInfo(filePath);
        bool     isChange = false;

        using (ExcelPackage package = new ExcelPackage(fileInfo))
        {
            ExcelWorksheet sheet = null;
            if (package.Workbook.Worksheets.Count == 0)
            {
                sheet = package.Workbook.Worksheets.Add(sheetName);
                LanguageEditorWindow.InitSheet(sheet);
            }
            else
            {
                sheet = package.Workbook.Worksheets[sheetName];
            }
            int newRow = DataManager.startRow;
            if (sheet.Dimension.Rows > newRow)
            {
                newRow = sheet.Dimension.Rows + 1;
            }
            int cols = sheet.Dimension.Columns;
            Dictionary <string, string> excelDict = GetCodeExcelDic(sheet, ref newRow);

            FieldInfo[] fieldInfos = typeof(LanguageSet).GetFields();
            for (int i = 0; i < fieldInfos.Length; i++)
            {
                string keyName   = fieldInfos[i].Name;
                string valueName = TransforEscape(fieldInfos[i].GetValue(null).ToString());
                if (excelDict.ContainsKey(keyName))
                {
                    //如果出现代码和excel的key相同,但是value不一致,则输出一条错误
                    //这里不能去随意替换,因为并不能确定哪方是对的
                    //比如翻译人员发现一个字写错了直接改了,虽然这种行为是禁止的,但是还是选择不相信
                    if (!excelDict[keyName].Equals(valueName))
                    {
                        Debug.LogError("excelDict[keyName]===" + excelDict[keyName]);
                        Debug.LogError("valueName===" + valueName);
                        Debug.LogError("keyName===" + keyName + "->这个主键的值变了");
                        Debug.LogError("--------------");
                    }
                }
                else
                {
                    if (newRow > sheet.Dimension.Rows)
                    {
                        sheet.InsertRow(newRow, 1);
                    }
                    sheet.Cells[newRow, 1].Value = keyName;
                    sheet.Cells[newRow, 2].Value = valueName;
                    for (int j = 1; j <= cols; j++)
                    {
                        sheet.Cells[newRow, j].Style.Border.BorderAround(ExcelBorderStyle.Thin);
                    }
                    newRow++;
                    isChange = true;
                }
            }
            package.Save();
        }
        if (!isChange)
        {
            Debug.Log("无新增项");
        }
        Debug.Log("成功");
    }
Пример #2
0
    private void OutputExcel()
    {
        string outputPath = LocalSaveManager.GetString(outputSaveKey, "", false);

        if (outputPath == "")
        {
            EditorUtility.DisplayDialog("路径不能为空", "路径不能为空", "确定");
            return;
        }

        //string[] stringsPrefab = AssetDatabase.FindAssets("t:prefab", new string[] { "Assets/Resources/prefab", "Assets/Resources/beginAsset" });

        string[] prefabPaths = AssetDatabase.FindAssets("t:prefab", pathList.ToArray());

        bool     isChange = false;
        FileInfo fileInfo = new FileInfo(outputPath + "/" + sheetName);

        using (ExcelPackage package = new ExcelPackage(fileInfo))
        {
            ExcelWorksheet sheet = null;
            if (package.Workbook.Worksheets.Count == 0)
            {
                sheet = package.Workbook.Worksheets.Add(sheetName);
                LanguageEditorWindow.InitSheet(sheet);
            }
            else
            {
                sheet = package.Workbook.Worksheets[sheetName];
            }
            int newRow = DataManager.startRow;
            if (sheet.Dimension.Rows > newRow)
            {
                newRow = sheet.Dimension.Rows + 1;
            }
            int cols = sheet.Dimension.Columns;

            Dictionary <string, string> key2ValueDic = new Dictionary <string, string>();
            Dictionary <string, string> value2KeyDic = new Dictionary <string, string>();
            for (int i = DataManager.startRow; i <= sheet.Dimension.Rows; i++)
            {
                if (sheet.Cells[i, 1].Value == null)
                {
                    newRow = i;
                    break;
                }
                string key   = sheet.Cells[i, 1].Value.ToString();
                string value = sheet.Cells[i, 2].Value.ToString();
                key2ValueDic.Add(key, value);
                value2KeyDic.Add(value, key);
            }

            for (int i = 0; i < prefabPaths.Length; i++)
            {
                string name = AssetDatabase.GUIDToAssetPath(prefabPaths[i]);
                //一些不想翻译的
                if (name.Contains("UITest"))
                {
                    continue;
                }
                GameObject obj   = (GameObject)AssetDatabase.LoadMainAssetAtPath(name);
                int        index = 1;
                Text[]     texts = obj.GetComponentsInChildren <Text>(true);
                for (int j = 0; j < texts.Length; j++)
                {
                    Text text = texts[j];
                    if (!LanguageManager.IsHaveChinese(text.text))
                    {
                        continue;
                    }
                    string value = text.text;
                    //如果在prefab中,限制了文字范围,那么ngui会在折行处添加\r,所以要去掉
                    value = value.Replace("\r", "");
                    //如果excel中没有对应中文,就新加一条
                    if (!value2KeyDic.ContainsKey(value))
                    {
                        isChange = true;
                        if (newRow > sheet.Dimension.Rows)
                        {
                            sheet.InsertRow(newRow, 1);
                        }
                        sheet.Cells[newRow, 1].Value = GetKey(key2ValueDic, obj.name, index);;
                        sheet.Cells[newRow, 2].Value = value;
                        for (int k = 1; k <= cols; k++)
                        {
                            sheet.Cells[newRow, k].Style.Border.BorderAround(ExcelBorderStyle.Thin);
                        }
                        newRow++;
                    }
                }
            }
            package.Save();
        }
        if (!isChange)
        {
            Debug.Log("无新增项");
        }
        Debug.Log("完成");
    }