生成Excel对应的类

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
using Excel;
using System.Data;
using System;

public class CreateClass
{  
    [MenuItem("GameTools/ExcelData",false,1)]

    static void ExcelData()
    {
        GetFiles();
    }


    static string rootpath = "";
    static void GetFiles()
    {
        rootpath = Application.dataPath + "/Editor/Configs";
        if (Directory.Exists(rootpath))
        {
            DirectoryInfo direction = new DirectoryInfo(rootpath);
            FileInfo[] files = direction.GetFiles("*", SearchOption.AllDirectories);

            for (int i = 0; i < files.Length; i++)
            {
                if (files[i].Name.EndsWith(".meta"))
                {
                    continue;
                }
                Debug.Log("Name:" + files[i].Name);
                string FileName = files[i].Name.Substring(0, 1).ToUpper() + files[i].Name.Substring(1, files[i].Name.Length - 1);
                FileName = FileName.Split('.')[0];
                ExcelToClass(rootpath + "/" + files[i].Name, FileName);
            }
        }
    }

    public static void ExcelToClass(string filePath, string fileName)
    {

        try
        {
            string curDir = Application.dataPath + "/Scripts/Data/";
            if (!System.IO.Directory.Exists(curDir))
            {
                System.IO.Directory.CreateDirectory(curDir);
            }
            string FilePath = curDir + fileName + ".cs";
            System.IO.StreamWriter file = new System.IO.StreamWriter(FilePath, false);
            file.Write("using System.Collections;\n");
            file.Write("using System.Collections.Generic;\n");
            file.Write("using UnityEngine;\n");
            file.Write("\n");
            file.Write("public class " + fileName);
            file.Write(":DataBase");
            file.Write("\n{\n");

            FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);
            IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);

            DataSet result = excelReader.AsDataSet();

            int columns = result.Tables[0].Columns.Count;
            int rows = result.Tables[0].Rows.Count;
            for (int j = 0; j < columns; j++)
            {
                file.Write("\t public ");
                file.Write(result.Tables[0].Rows[1][j].ToString() + " ");
                file.Write(result.Tables[0].Rows[2][j].ToString());
                file.Write(";");
                file.Write("//");
                file.Write(result.Tables[0].Rows[0][j].ToString());
                if (j != columns - 1)
                    file.Write("\n");
            }
            file.Write("\n}");
            file.Close();
            file.Dispose();

            string tableName = fileName + "Table";
            string tablePath = curDir + tableName + ".cs";
            System.IO.StreamWriter file0 = new System.IO.StreamWriter(tablePath, false);
            file0.Write("using System.Collections;\n");
            file0.Write("using System.Collections.Generic;\n");
            file0.Write("using UnityEngine;\n");
            file0.Write("\n");
            file0.Write("public class " + tableName);
            file0.Write("\n{\n\t");
            file0.Write("public Dictionary<int,");
            file0.Write(fileName + "> ");
            file0.Write(fileName + "Dic;");
            file0.Write("\n\t");
            file0.Write("public ");
            file0.Write(fileName + "[] ");
            file0.Write(fileName + "s;");
            file0.Write("\n}");
            file0.Close();
            file0.Dispose();

        }
        catch (System.Exception e)
        {

            throw e;
        }
    }


}

  读取json

  

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Data;
using System.IO;
using LitJson;
using System;
using System.Linq;

public class ConfigManager:MonoBehaviour
{
    public static ConfigManager instance;

    private void Awake()
    {
        instance = this;
    }

    private TestTable testTable = new TestTable();
    private ItemTable itemTable = new ItemTable();

    public void Load()
    {
        LoadConfig(ref testTable.Tests, ref testTable.TestDic);
        LoadConfig(ref itemTable.Items, ref itemTable.ItemDic);
    }


    public TestTable TestTable
    {
        get { return testTable; }
    }

    public ItemTable ItemTable
    {
        get { return itemTable; }
    }

    public Item GetItem(int id)
    {
        Item item;
        if (itemTable.ItemDic.TryGetValue(id, out item))
        {
            return item;
        }
        return null;
    }

    #region 加载json
    private void LoadConfig<T>(ref T[] ts, ref Dictionary<int, T> td) where T : DataBase
    {
        string path = Application.dataPath + "/Editor/Jsons/" + typeof(T).ToString() + ".json";
        StreamReader json = File.OpenText(path);
        string input = json.ReadToEnd();
        ts = JsonMapper.ToObject<T[]>(input);
        T[] ts0 = ts;
        td = ts.ToDictionary(key=>Array.IndexOf<T>(ts0,key),value=>value);
    }
    #endregion
}