4

Excel导表工具(开源) - 小紫苏

 2 years ago
source link: https://www.cnblogs.com/littleperilla/p/16330928.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Excel导表工具(开源) - 小紫苏 - 博客园

image-20220531144853430
  • 支持int、float、bool、string基础类型
  • 支持unity类型vector3,vector2,color
  • 自动生成csharp类
  • 单个excel中多个sheet,依次导出
  1. 设置config.txt文件,按需求配置;

#为注释行必须;结尾

#excel存放路径;
excelPath:./Excel/;
#数据保存路径;
dataPath:./DataTable/;
#c#类保存路径;
classPath:./CSharp/;
#输出类型;
exportType:Json;
isExportServer:False
  1. 双击运行DataTable.exe,等待执行完毕;
  • 第一行注释

  • 第二行字段类型

  • 第三行变量名(属性名)

  • 第一列留空

  • 数组:类型+[] e.g: int[]

  • 类型:dic<string,int>

    变量名:变量名+:+key值

    dic<string,float> dic<string,float> dic<string,float>
    Attribute:atk Attribute:def Attribute:spd
  • 枚举:自动生成的枚举类型从1开始,Enum类型为:Enum+变量名字段;

Json序列化

使用json库需要对Vector3等Unity字段魔改;

Litjson库魔改:将自定义类型注册进json库;

namespace LitJson.Extensions
{
    public static class JsonExtensions
    {

        public static void WriteProperty(this JsonWriter w, string name, long value)
        {
            w.WritePropertyName(name);
            w.Write(value);
        }

        public static void WriteProperty(this JsonWriter w, string name, string value)
        {
            w.WritePropertyName(name);
            w.Write(value);
        }

        public static void WriteProperty(this JsonWriter w, string name, bool value)
        {
            w.WritePropertyName(name);
            w.Write(value);
        }

        public static void WriteProperty(this JsonWriter w, string name, double value)
        {
            w.WritePropertyName(name);
            w.Write(value);
        }

    }
}

 using UnityEngine;
 using System;
 using System.Collections;
 
 using LitJson.Extensions;

 namespace LitJson
 {

#if UNITY_EDITOR
     [UnityEditor.InitializeOnLoad]
#endif
     /// <summary>
     /// Unity内建类型拓展
     /// </summary>
     public static class UnityTypeBindings
     {

         static bool registerd;

         static UnityTypeBindings()
         {
             Register();
         }

         public static void Register()
         {

             if (registerd) return;
             registerd = true;


             // 注册Type类型的Exporter
             JsonMapper.RegisterExporter<Type>((v, w) => { w.Write(v.FullName); });

             JsonMapper.RegisterImporter<string, Type>((s) => { return Type.GetType(s); });

             // 注册Vector2类型的Exporter
             Action<Vector2, JsonWriter> writeVector2 = (v, w) =>
             {
                 w.WriteObjectStart();
                 w.WriteProperty("x", v.x);
                 w.WriteProperty("y", v.y);
                 w.WriteObjectEnd();
             };

             JsonMapper.RegisterExporter<Vector2>((v, w) => { writeVector2(v, w); });

             // 注册Vector3类型的Exporter
             Action<Vector3, JsonWriter> writeVector3 = (v, w) =>
             {
                 w.WriteObjectStart();
                 w.WriteProperty("x", v.x);
                 w.WriteProperty("y", v.y);
                 w.WriteProperty("z", v.z);
                 w.WriteObjectEnd();
             };

             JsonMapper.RegisterExporter<Vector3>((v, w) => { writeVector3(v, w); });

             // 注册Vector4类型的Exporter
             JsonMapper.RegisterExporter<Vector4>((v, w) =>
             {
                 w.WriteObjectStart();
                 w.WriteProperty("x", v.x);
                 w.WriteProperty("y", v.y);
                 w.WriteProperty("z", v.z);
                 w.WriteProperty("w", v.w);
                 w.WriteObjectEnd();
             });

             // 注册Quaternion类型的Exporter
             JsonMapper.RegisterExporter<Quaternion>((v, w) =>
             {
                 w.WriteObjectStart();
                 w.WriteProperty("x", v.x);
                 w.WriteProperty("y", v.y);
                 w.WriteProperty("z", v.z);
                 w.WriteProperty("w", v.w);
                 w.WriteObjectEnd();
             });

             // 注册Color类型的Exporter
             JsonMapper.RegisterExporter<Color>((v, w) =>
             {
                 w.WriteObjectStart();
                 w.WriteProperty("r", v.r);
                 w.WriteProperty("g", v.g);
                 w.WriteProperty("b", v.b);
                 w.WriteProperty("a", v.a);
                 w.WriteObjectEnd();
             });

             // 注册Color32类型的Exporter
             JsonMapper.RegisterExporter<Color32>((v, w) =>
             {
                 w.WriteObjectStart();
                 w.WriteProperty("r", v.r);
                 w.WriteProperty("g", v.g);
                 w.WriteProperty("b", v.b);
                 w.WriteProperty("a", v.a);
                 w.WriteObjectEnd();
             });

             // 注册Bounds类型的Exporter
             JsonMapper.RegisterExporter<Bounds>((v, w) =>
             {
                 w.WriteObjectStart();

                 w.WritePropertyName("center");
                 writeVector3(v.center, w);

                 w.WritePropertyName("size");
                 writeVector3(v.size, w);

                 w.WriteObjectEnd();
             });

             // 注册Rect类型的Exporter
             JsonMapper.RegisterExporter<Rect>((v, w) =>
             {
                 w.WriteObjectStart();
                 w.WriteProperty("x", v.x);
                 w.WriteProperty("y", v.y);
                 w.WriteProperty("width", v.width);
                 w.WriteProperty("height", v.height);
                 w.WriteObjectEnd();
             });

             // 注册RectOffset类型的Exporter
             JsonMapper.RegisterExporter<RectOffset>((v, w) =>
             {
                 w.WriteObjectStart();
                 w.WriteProperty("top", v.top);
                 w.WriteProperty("left", v.left);
                 w.WriteProperty("bottom", v.bottom);
                 w.WriteProperty("right", v.right);
                 w.WriteObjectEnd();
             });

         }

     }
 }

后续计划加入protobuf和bytes导出;

计划可导出.go文件;

相比其他导表工具,优势就是简单使用,不用看长长的文档;

有bug或修改建议欢迎交流;

开源地址:https://github.com/Rebort1012/DataTable.git

个人博客:perilla.work


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK