Unity Excel转Json工具实现多语言本地化

Unity Excel转Json工具实现多语言本地化文章介绍Unity3d添加工具,实现excel转json功能

大家好,又见面了,我是你们的朋友全栈君。

  1. 创建脚本文件,继承自EditorWindow
public class LocalizationTool : EditorWindow
  1. 添加至工具栏;
[MenuItem("Tools/LocalizationTool")]
  1. 实现操作界面;
    图3.1
    代码如下:
private void OnGUI()
    { 
   
        GUILayout.Space(15);
        GUILayout.BeginHorizontal();
        GUILayout.Label("Excel目录:", EditorStyles.boldLabel, GUILayout.Width(80));
        GUILayout.TextField(excelPath);
        if (GUILayout.Button("浏览", GUILayout.Width(50)))
        { 
   
            SelectExcelPath();
        }
        GUILayout.EndHorizontal();

        GUILayout.Space(5);
        GUILayout.BeginHorizontal();
        GUILayout.Label("Json目录:", EditorStyles.boldLabel, GUILayout.Width(80));
        GUILayout.TextField(jsonPath);
        if (GUILayout.Button("浏览", GUILayout.Width(50)))
        { 
   
            SelectJsonPath();
        }

        GUILayout.EndHorizontal();

        GUILayout.Space(30);
        GUILayout.BeginHorizontal();
        GUILayout.Label("");
        if (GUILayout.Button("Localization", GUILayout.Width(100)))
        { 
   
            ExcelToJson();
        }
        GUILayout.Label("");
        GUILayout.EndHorizontal();
    }
  1. 实现Excel转Json;
private void ExcelToJson()
    { 
   
        Debug.Log(excelPath);
        if (!Directory.Exists(excelPath))
        { 
   
            Debug.Log("路径不存在");
        }

        DirectoryInfo info = new DirectoryInfo(excelPath);
        FileInfo[] files = info.GetFiles();
        for (int i = 0; i < files.Length; i++)
        { 
   
            bool b1 = files[i].Name.EndsWith(".xls");
            bool b2 = files[i].Name.EndsWith(".xlsx");
            bool b = b1 || b2;
            if (File.Exists(files[i].FullName) && b)
            { 
   
                var wk = WorkbookFactory.Create(files[i].FullName);
                for (int j = 0; j < wk.NumberOfSheets; j++)
                { 
   
                    ISheet sheet = wk.GetSheetAt(j);
                    if (sheet.LastRowNum > 0)
                    { 
   
                        var row_0 = sheet.GetRow(0);

                        if (row_0 != null &&  row_0.LastCellNum > 1)
                        { 
   
                            for (int l = 0; l < row_0.LastCellNum - 1; l++)
                            { 
   
                                var t = new Dictionary<string, object>();
                                var path = "";
                                var lst = new List<Dictionary<string, object>>();

                                for (int k = 1; k <= sheet.LastRowNum; k++)
                                { 
   
                                    var r = new Dictionary<string, object>();
                                    IRow row = sheet.GetRow(k);
                                    if (row != null)
                                    { 
   

                                        r[row_0.GetCell(0).ToString()] = row.GetCell(0).ToString();

                                        r["textContent"] = row.GetCell(l + 1).ToString();
                                        path = row_0.GetCell(l + 1).ToString();
                                    }
                                    lst.Add(r);
                                }

                                t.Add("data", lst);
                                string output = JsonConvert.SerializeObject(t, Formatting.Indented);
                                File.WriteAllBytes(getTargetFilePath(jsonPath, Path.GetFileNameWithoutExtension(files[i].Name), path), Encoding.UTF8.GetBytes(output));
                            }
                        }

                    }

                }
            }
        }
    }
    private static string getTargetFilePath(string filePath, string fileName, string fileType)
    { 
   
        var b1 = Path.GetFileNameWithoutExtension(fileName) + "_" + fileType;
        filePath = Path.Combine(filePath, string.Format("{0}.json", b1));
        return filePath;
    }

Excel文件如下:
excel示例
生成的json文件如下:
Json列表示例
json文件内容示例

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/139992.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号