生成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
}