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文件内容示例

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Excel 日期和时间函数[通俗易懂]

    Excel 日期和时间函数[通俗易懂]1、TODAY和NOW函数today和now函数日期可以进行加减运算2、提取日期和时间的函数双击右下自动填充完!!!3、WEEKDAY函数weekday函数4、DATEDIF函数

    2022年8月3日
    7
  • 功能测试数据测试之因果图分析方法[通俗易懂]

    功能测试数据测试之因果图分析方法[通俗易懂]定义是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。因果图法产生的背景等价类划分法和边界值分析方法都是着重考虑输入条件,但没有考虑输入条件的各种组合、输入条件之间的相互制约关系。这样虽然各种输入条件可能出错的情况已经测试到了,但多个输入条件组合起来可能出错的情况却被忽视了。如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、相应产生多个动作的形式来进行测试用例的设计,这就需要利用

    2022年8月14日
    5
  • python 中 print 函数用法大全

    python 中 print 函数用法大全

    2022年3月8日
    33
  • Confluence 6 配置 XSRF 保护[通俗易懂]

    Confluence 6 配置 XSRF 保护[通俗易懂]Confluence需要一个XSRF令牌才能创建一个评论,这个被用来保护用户不在评论区恶意发布内容。所有Confluence自定义的主题都被启用了这个功能,但是如果你使用自定义主题的话,可能这些主题不支持这些安全特性,你可以禁用这个功能。 在禁用XSRF之前,请仔细考虑可能在你Confluence安装实例中可能会遇到的安全问题。请参考 cgisecurity.com 中…

    2022年5月16日
    41
  • 写博客是个好习惯

    写博客是个好习惯

    2021年8月19日
    53
  • 宝塔linux面板.txt

    宝塔linux面板.txt

    2021年9月23日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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