【Unity】读取Excel工具

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【Unity】读取Excel工具相关的知识,希望对你有一定的参考价值。

参考技术A

是什么?

主要功能
1.就是上面说的,转化为ScriptObject数据类,这里分为两种:
a.分离一个Excel表中的所有sheet为单独的一个数据体。
b.把一个Excel表中所有的sheet合成在一个数据体中。
注意:第二种exce中必须每一个sheet的数据项是一样并且位置也是相同的
2.可以选择每一个sheet或者sheet中的数据单项是否被生成到数据体中。
3.系统会自动识别每一个数据单项的数据类型与数据参数名,当然也可以用户更改。
4.在创建数据体完成后,再改表中的数据,数据体自动更新。当然如果是增加删除单项数据,就需要重新生成数据体。

使用方法

1.在Project视窗下选中需要生成数据类的Excel表,右键菜单,选择“Read Excel”。

5.然后在游戏载入时调用一下下面这一句话。

6.实际运用时数据分为两类:

a.分离单数一个sheet的数据体访问。

testObj_Sheet1是你的数据类,然后使用GetData方法传入id即可返回数据体实例。

b.合并sheet的数据体访问方式。

testObj是你的数据类,然后使用GetSheet方法获得sheet,这里自动帮用户生成了sheet的枚举,用户可以直接使用枚举来获得sheet,然后的方法和上一种一样。

原理

unity使用.net的api是2.0的,所以没有可以直接读取Excel哪部分源码。就选择使用了NPOI这样一个开源框架。这里有几个学习NPOI的传送门, 官网 、 官网繁体文档 、 官网英文文档 、 CSDN博客推荐看这个 ,具体的就不详细讲解了。

读取到数据后再使用try测试数据类型,自动填充数据类型。这里就是为什么浮点型需要用户自己设置的原因。

使用的ScriptObject这个Unity给出可以用来存数据的资源。这个其实也可以更改成Json文件,这样服务器跟客户端都可以用了。不过ScriptObject可以很直观的看到数据的储存。

这里用到一个资源变化的回调OnPostprocessAllAssets,这个是需要继承于AssetPostprocessor这类的, 详细可以看这里 。

这里因为字典不能序列化所以需要在游戏加载时,初始化数据一次。

原理就说这么多吧,再具体的大家可以看看源码。

Unity3D读取之——读取Excel文件内容

Unity3D开发过程中,对于Excel表的读取是很频繁的一件事情,主要是用来记录各种数据,各个平台可能有很多方式方法,比如Android,你可以插件,也可以用第三方Java开发,打包成Plugin下用的.dll包,再C#和Java交互实现Excel读取(比较麻烦,不建议,除非你对安卓开发也很了解,可以使用)
今天说一下FlexReader插件,专门读取Excel文件内容。
直接上代码:
插件:可以上Asset Store上直接搜FlexReader(土豪使用)
下载地址:链接:https://pan.baidu.com/s/1mLTu2ymQY0Wmvpzb0DQ5iw 密码:j9m6
//异步加载文件

 IEnumerator LoadGuideAync(string path, DownloadHandler handler)
    {
        var url = Path.Combine(Application.streamingAssetsPath, path);
        using (var request = UnityWebRequest.Get(url))
        {
            yield return request.SendWebRequest();
            var bytes = request.downloadHandler.data;
            handler(bytes);
        }
    }

//加载到内容回调

  void LoadGuideData(byte[] bytes)
    {
        //bytes就是加载Excel中文件内容流
        if (bytes.Length == 0)
            return;
        //通过插件的WorkBook类转换得到一个列表,这个列表的大小就表示的是Excel中表的个数。
        var book = new WorkBook(bytes);
        Debug.Log(book.Count);
        if (book.Count < 2)
            return;
        InitNoviceGuideRectTransform(book[0]);
        InitNoviceGuideRectTransform(book[1]);
    }

对每一个表进行解析,读取每格的数据

         void InitNoviceGuideRectTransform(IEnumerable<Row> rows)
    {
        int index = -1;
        int count = rows.Count(r => !r.IsEmpty());
        if (count == 0)
            return;
                //将二维数字存到列表 ,通过行列读取 
        List<Row> rowData = new List<Row>(rows);
                 for (int j = 1; j < rowData .Count; j++)//行
        {
            for (int i = 0; i < rowData[j].Count; i++)//列
            {
                Debug.Log(rowData[j][i].Text);
            }
        }  
  }

就是这么简单,读取你想要的数据,干你想干的事情。

以上是关于【Unity】读取Excel工具的主要内容,如果未能解决你的问题,请参考以下文章

unity Excel配置表导出工具

Unity3D读取之——读取Excel文件内容

Unity3D读取之——读取Excel文件内容

UNITY--读取Excel

Unity读取Excel文件(附源代码)

unity3d怎样读取excel