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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 我做游戏开发这八年[通俗易懂]

    我做游戏开发这八年简述与编程擦肩而过从图像设计到痴迷编程入门编程沉迷编程Java的图形编程就职游戏开发2011,第一次面试&实习生第一个游戏2012年,第二个重量级IP游戏2013年,转战手游与创业2014-2015,第一次创业2015,西山居和多益网络2016-2018,第二次创业2018至今,360游戏艺术(岂凡网络)技术总监简述这篇文章并不是想教会大家如何开发游戏,更不能教大家如…

    2022年4月10日
  • 树莓派4b c语言,【树莓派4B学习】七、树莓派4B的GPIO基础操作

    树莓派4b c语言,【树莓派4B学习】七、树莓派4B的GPIO基础操作链接:https://pan.baidu.com/s/1icgrCoc-piC0Eid0NlRlMA提取码:6h0b一、主流GPIO库介绍【pythonGPIO】【开发语言】——python【简单介绍】——该库更确切的名称为raspberry-gpio-python,树莓派官方资料中推荐且容易上手。pythonGPIO是一个小型的python库,可以帮助用户完成raspberry相关IO口操…

    2022年5月31日
  • JQuery Div scrollTop ScrollHeight

    JQuery Div scrollTop ScrollHeightjQuery里和滚动条有关的概念很多,但是有三个属性和滚动条的拖动有关,就是:scrollTop、scrollLeft、scrollHeight。其中scrollHeight属性,互联网上几乎搜素不到关于它的应用技巧,而我正好需要用到它。我们现在只探讨和垂直滚动有关的scrollTop、scrollHeight属性。一、滚动条有关属性的正确理解:假设有以下Html代码:

    2022年7月23日
  • 在C#中ParameterizedThreadStart和ThreadStart区别

    在C#中ParameterizedThreadStart和ThreadStart区别
    不需要传递参数,也不需要返回参数
      我们知道启动一个线程最直观的办法是使用Thread类,具体步骤如下:
    ThreadStartthreadStart=newThreadStart(Calculate);Threadthread=newThread(threadStart);thread.Start();publicvoidCalculate(){ doubleDiameter=0.5; Console.Write(“T

    2022年7月15日
  • JDK环境变量配置(win10)[通俗易懂]

    JDK环境变量配置(win10)[通俗易懂]前言对于每一位做Java开发人员来说,JDK是必须要安装的,安装好JDK,其实并没有结束,一般情况下还需要配置JDK的环境变量,给大家介绍一下如何在Win10下配置JDK,并检测是否配置成功。步骤使用Windows图标+R,快速打开“运行”操作界面,并输入cmd,回车确认。在命令行输入java–version;如果能显示java的版本信息,则表示不需要配置,下面的步骤也不需要了。打开系统环境变量配置的页面。具体操作是:打开开始菜单,找到“此电脑”,然后右键“更多”→“属性”。在弹出的页面,

    2022年7月21日
  • html5空格代码怎么写_html怎么添加空格

    html5空格代码怎么写_html怎么添加空格本篇文章为大家介绍的是HTML的空格代码的写法,“&nbsp;”代码的用法,还有几种空格方式的解释,都在文章中,现在开始往下看吧。首先,我们知道这HTML网页中插入多个空格间隔是需要特殊字符编码的。如果是直接敲入多个空格键的话,虽然看似代码中有了多个空格效果,但其实在浏览器中还是只有1个空格间隔位置的。接下来教大家如果输入html空格字符的话,多个空格字符是如何输入的?我们采用直接复制空格字符与DW软件输入空格字符的两种方法介绍:web前端全栈资料粉丝福利(面试题、视频、资料笔记、进阶路

    2022年4月19日

发表回复

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

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