从策划配置文件导入项目实际使用,为提高效率总会使用一些转换工具,据同事介绍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 = ; i < data[].Count; i++)
{
mapConfig.BasicTileData.Add((SurfaceTile)data[][i]);
}
for (int i = ; i < data[].Count; i++)
{
mapConfig.BuildingData.Add((BuildingTile)data[][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

  

  

  

插件之一:Epplus的更多相关文章

  1. 读取和导出下载 excel 2003,2007 资料

    protected void Page_Load(object sender, EventArgs e) { //直接在bin add referece search Microsoft.Office ...

  2. .Net Excel 导出图表Demo(柱状图,多标签页)

    1 使用插件名称Epplus,多个Sheet页数据应用,Demo为柱状图(Epplus支持多种图表) 2 Epplus 的安装和引用 新建一个工程文件或控制台应用程序 打开 Vs2017 Tools  ...

  3. .Net Excel 导出图表Demo(柱状图,多标签页) .net工具类 分享一个简单的随机分红包的实现方式

    .Net Excel 导出图表Demo(柱状图,多标签页) 1 使用插件名称Epplus,多个Sheet页数据应用,Demo为柱状图(Epplus支持多种图表) 2 Epplus 的安装和引用 新建一 ...

  4. ASP.NET Core导入导出Excel文件

    ASP.NET Core导入导出Excel文件 希望在ASP.NET Core中导入导出Excel文件,在网上搜了一遍,基本都是使用EPPlus插件,EPPlus挺好用,但商用需要授权,各位码友若有好 ...

  5. 生成 excel 插件 Epplus

    最近做 .net core 项目 发现一个新的 生成excel 的插件 . 以前值用 aspose 或者 npio. 简介:Epplus是一个使用Open Office XML(Xlsx)文件格式,能 ...

  6. Epplus 使用的简单介绍

    操作Excel的主要有以下类库: MyXls(http://sourceforge.net/projects/myxls/) Koogra(http://sourceforge.net/project ...

  7. Epplus下的一个将Excel转换成List的范型帮助类

    因为前一段时间公司做项目的时候,用到了Excel导入和导出,然后自己找了个插件Epplus进行操作,自己将当时的一些代码抽离出来写了一个帮助类. 因为帮助类是在Epplus基础之上写的,项目需要引用E ...

  8. .NET CORE webapi epplus 导入导出 (实习第一个月的笔记)

    最近有个需求就是网页表格里面的数据导出到excel  于是从各位前辈的博客园搜了搜demo  大部分非为两类 都是用的插件NPOI和Eppluse ,因此在这里就介绍Eppluse 用法,还有就是在博 ...

  9. Angular杂谈系列1-如何在Angular2中使用jQuery及其插件

    jQuery,让我们对dom的操作更加便捷.由于其易用性和可扩展性,jQuer也迅速风靡全球,各种插件也是目不暇接. 我相信很多人并不能直接远离jQuery去做前端,因为它太好用了,我们以前做的东西大 ...

随机推荐

  1. Oracle 多表联合删除?--转

    oracle和mysql多表删除数据的方法一大把,好多都是没经过证实的,你很可能已经被错误信息误导了,下面我以mysql两张表删除数据为例,来让给为注意到这一点,我在mysql中新建了两张表,分别是用 ...

  2. C# 任务、线程、同步(一)

    static object taskMethodLock = new object(); static void TaskMethod(object title) { lock (taskMethod ...

  3. Codeforces Round #539 (Div. 1) 1109F. Sasha and Algorithm of Silence's Sounds LCT+线段树 (two pointers)

    题解请看 Felix-Lee的CSDN博客 写的很好,不过最后不用判断最小值是不是1,因为[i,i]只有一个点,一定满足条件,最小值一定是1. CODE 写完就A,刺激. #include <b ...

  4. shiro认证-SSM

    shiro认证-SSM pom <dependency> <groupId>org.apache.shiro</groupId> <artifactId> ...

  5. 用HTML5里的window.postMessage在两个网页间传递数据

    说明 window.postMessage()方法可以安全地实现Window对象之间的跨域通信.例如,在一个页面和它生成的弹出窗口之间,或者是页面和嵌入其中的iframe之间. 通常情况下,不同页面上 ...

  6. 23333 又是一篇水文章(以下是各种复制来的关于maven转成eclipse项目)

    (转载) 当我们通过模版(比如最简单的maven-archetype-quikstart插件)生成了一个maven的项目结构时,如何将它转换成eclipse支持的java project呢? 1. 定 ...

  7. 把Cstring类型的字符串转化为char* 字符串;

    int char_leng; Cstring str="abcd"; char_leng=str.GetLength();//获取字符串长度 char *str_temp=(cha ...

  8. LOJ2537. 「PKUWC2018」Minimax [DP,线段树合并]

    传送门 思路 首先有一个\(O(n^2)\)的简单DP:设\(dp_{x,w}\)为\(x\)的权值为\(w\)的概率. 假设\(w\)来自\(v1\)的子树,那么有 \[ dp_{x,w}=dp_{ ...

  9. Shell基础之四 变量与运算

    shell变量与运算 变量存在于内存中.假设变量str,设置或修改变量属性时,不带$号,只有引用变量的值时才使用$号.也就是说在内存中,标记变量的变量名称是str,而不是$str. 变量数据的存储方式 ...

  10. ASP.NET的MVC设计模式

    当开发者听到“设计模式”这个词时,他们通常联想到两个场景.一组开发者正在讨论许多创造性意见,正在开会,但是却没有进行编码.另外一组人能制定出正确的计划,保证系统能够开发成功,代码可以重用. 而现实一般 ...