ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

插件之一:Epplus

2019-05-04 12:49:32  阅读:319  来源: 互联网

标签:插件 之一 Assembly string int Epplus List data public


  从策划配置文件导入项目实际使用,为提高效率总会使用一些转换工具,据同事介绍Epplus更强大一些,我自己试了下,发现api非常全面且强大。记录下所学。

一、插件来源

  https://github.com/JanKallman/EPPlus

  https://www.nuget.org/packages/EPPlus/

二、使用

  在其github的WiKi页签有简单的使用示例, 具体导成什么格式,看自己的项目需求了。我是转成.asset和json格式的。

  2.1 配置excel

  我分了两个sheet:

                 

  2.2 设计对应的数据结构

  我使用的 jsonUtility.fromjson 不支持ScriptableObject,所以写了两个结构。

[Serializable]
public class SurfaceTile
{
    public int ID;
    public int Layer;
    public string SpriteName;
    public string Vertices;
}

[Serializable]
public class BuildingTile
{
    public int ID;
    public string SpriteName;
    public int GridWidth;
    public int GridHeight;
    public int Interactive;
}

public class MapTileConfig : ScriptableObject 
{
    public List<SurfaceTile> BasicTileData;
    public List<BuildingTile> BuildingData;
}

public class MapTileConfigForJson
{
    public List<SurfaceTile> BasicTileData;
    public List<BuildingTile> BuildingData;
}

  

  2.3 解析

   2.3.1 .asset解析

  为了减少解析过程与数据结构的耦合, 我将sheet名设置为数据结构名, 利用反射来获取类型与创建实例

 static Type GetType(string typeName)
 {
     Type type = null;
     Assembly curExecuteAssembly = Assembly.GetExecutingAssembly();
     AssemblyName[] refAssembly = curExecuteAssembly.GetReferencedAssemblies();
     foreach (var assemblyName in refAssembly)
     {
         var assembly = Assembly.Load(assemblyName);
         if(assemblyName != null)
         {
             type = assembly.GetType(typeName);
             if (type != null)
                    break;
         }
     }
     //typeof(SurfaceTile).Assembly.GetType()
     return type;
 }


var dataObj = dataType.Assembly.CreateInstance(sheet.Name);

  

  我使用的 List<List<object>> excelData 来临时保存excel数据,但在数据转换为 MapTileConfig 类型没想到好的处理方式。希望有想法的可以指导下。

 static void SettingToAsset(List<List<object>> data, string assetPath)
 {
     MapTileConfig mapConfig = ScriptableObject.CreateInstance<MapTileConfig>();

     for (int i = 0; i < data[0].Count; i++)
     {
         mapConfig.BasicTileData.Add((SurfaceTile)data[0][i]);
     }
     for (int i = 0; i < data[1].Count; i++)
     {
         mapConfig.BuildingData.Add((BuildingTile)data[1][i]);
     }

     AssetDatabase.CreateAsset(mapConfig, testAssetPath + "/MapTileConfig.asset");
     AssetDatabase.SaveAssets();
 }

 

  2.3.2 json解析

  只要按着json格式,将键值对对应好,解析是很容易的,唯一没想明白的是jsonUtility.fromjson竟然不支持ScriptableObject结构。

三、总结

  因大量的逻辑代码都是用的lua,所以excel解析成json或直接lua形式的数据,都是比较方便的。

  有兴趣的可以查看我的测试代码:https://github.com/feixus/UnityTools

  

 

  

  

 

标签:插件,之一,Assembly,string,int,Epplus,List,data,public
来源: https://www.cnblogs.com/yaosee/p/10808148.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有