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("成功"); }
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("完成"); }