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


相关推荐

  • fopen函数打开文件失败原因_为什么打开文件失败

    fopen函数打开文件失败原因_为什么打开文件失败大家好,我是疯狂的比特,一个每天在互联网上种菜和砍柴的程序员今天给大家分享一个C语言初学者常见的一个问题。问题经常有人问我,我的C语言代码好好的,怎么就打开文件失败了呢?我们先来看看代码吧#include<stdio.h>#include<stdlib.h>intmain(){ FILE*pfRead=fopen(“test.txt”,”r”); if(pfRead==NULL) { printf(“打开文件test.txt失败啦\

    2022年10月14日
    4
  • Centos安装redis_redis编译安装

    Centos安装redis_redis编译安装Centos安装redis61、下载安装包https://redis.io/2、上传安装包到服务器opt下3、解压安装包tar-xzvfredis-6.2.5.tar.gz4、解压安装包重命名mvredis-6.2.5.tar.gzredis5、进入安装包cdredis6、编译检测maketest7、安装makePREFIX=/opt/redis6install8、启动cd/opt/redis6/bin./redis-server#备注:想后台运

    2025年9月26日
    4
  • HashMap遍历以及遍历顺序[通俗易懂]

    HashMap遍历以及遍历顺序[通俗易懂]HashMap遍历以及遍历顺序HashMap是Java语言中一种键值对(key-value)数据结构,但不记录key的插入顺序,如果要按照插入顺序进行遍历,则需要使用LinkedHashMap类型。本文将介绍下HashMap的三种遍历方式,LinkedHashMap遍历方式相同!(在leetcode12.整数转罗马数字题目中使用到HashMap遍历,遂做此记录!)HashMap结构定义如下:Map<Integer,String>map=newHashMap<Inte

    2025年10月15日
    5
  • docker 修改容器时间_jenkins docker持续集成

    docker 修改容器时间_jenkins docker持续集成前言用docker搭建的Jenkins环境时间显示和我们本地时间相差8个小时,需修改容器内部的系统时间查看时间查看系统时间date-R进入docker容器内部,查看容器时间dockere

    2022年7月30日
    7
  • 测试环境和生产环境数据同步_Django开发测试生产环境

    测试环境和生产环境数据同步_Django开发测试生产环境一、五种环境1、开发环境(DEV):开发环境是程序猿们专门用于开发的服务器,配置可以比较随意,为了开发调试方便,一般打开全部错误报告。2、测试环境(UAT):一般是克隆一份生产环境的配置,一个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上。3、生产环境(PROD):是指正式提供对外服务的,一般会关掉错误报告,打开错误日志。可以理解为包含所有的功能的环境,任何项目所使用的环境都以这…

    2022年9月30日
    3
  • 教你写Makefile(很全,含有工作经验的)

    教你写Makefile(很全,含有工作经验的)原文转载文Makefile值得一提的是,在Makefile中的命令,必须要以[Tab]键开始。    什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是…

    2022年5月8日
    32

发表回复

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

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