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


相关推荐

  • 网站ssl证书申请_证书注册需要什么材料

    网站ssl证书申请_证书注册需要什么材料HTTPS是指网站在地址栏显示的加密协议,这个协议称作为HTTPS,但实现HTTPS必须要用HTTPS证书才可以,这就告诉大家任何申请HTTPS证书。申请HTTPS方法1、HTTPS证书申请之前我们需要准备:域名、邮箱(用于接收证书)。2、然后将域名确定后提交至Gworg进行申请。3、根据要求完成域名认证,可选认证方式DNS解析、文件认证、邮箱。4、大约十几分钟就可以获得SSL证书文件。5、配置到指定的服务器或者CDN等产品。6、HTTPS证书只需几分钟就可以完成。如果对申请

    2022年10月1日
    0
  • ScheduledExecutorService 接口[通俗易懂]

    ScheduledExecutorService 接口[通俗易懂]newScheduledThreadPool()或者newSingleThreadScheduled-Executor()方法:延迟执行、周期性执行的执行器如果想在某一段时间之后执行线程操作,或者周期性地重复执行线程操作,则可以使用工厂类Executors的newScheduledThreadPool()方法或者newSingleThreadSche…

    2022年5月5日
    66
  • 时间轮详解

    时间轮详解转载自:https://blog.csdn.net/paxhujing/article/details/52066620问题引入:游戏里面每个Player身上有很多buffs,在每一个tick(最小时间段)都要去检查buff里面的每一个buff是不是过期,产生的效果如何,造成在每个tick里面都去遍历一个长list,明显很不好。怎么优化?1.原始模型:buff的状态在每一个tick里面都要更新!可…

    2022年10月1日
    0
  • ajax是什么框架_常用的web开发框架

    ajax是什么框架_常用的web开发框架AJAX(AsynchronousJavaScriptandXML,异步JavaScript和XML),是创建交互式Web应用的主要开发技术。互联网中也有大量的关于AJAX的框架,本文汇总了最常

    2022年8月5日
    4
  • 【编程语言】CentOS 7 下pip更新命令

    【编程语言】CentOS 7 下pip更新命令CentOS7下pip更新命令CentOS7需要更新pip时,只需要一下简单的命令即可搞定:pipinstall–upgradepip

    2022年6月6日
    173
  • XGBoost+LightGBM+LSTM:一次机器学习比赛中的高分模型方案

    XGBoost+LightGBM+LSTM:一次机器学习比赛中的高分模型方案目录1 数据探索与数据预处理 21.1赛题回顾 21.2数据探索性分析与异常值处理 21.3相关性分析 52 特征工程 82.1光伏发电领域特征 82.2高阶环境特征 112.3特征选择 113 模型构建与调试 113.1预测模型整体结构 113.2基于LightGBM与XGBoost的模型构建与调试 123.3基于LSTM的模型构建与调试 133.4…

    2022年5月1日
    83

发表回复

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

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