UNITY--读取Excel的几种方式

这篇具有很好参考价值的文章主要介绍了UNITY--读取Excel的几种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一.DLL插件读取

1.1.Excel存放位置

1.2.使用示例

1.3.Excel格式

 1.4.输出显示 

1.5.所需插件

二.Excel转成Asset文件,再进行读取

2.1Excel文件存放位置

2.2 编辑模式生成Asset文件,并保存到指定位置 

2.3创建ExcelRead脚本,读取Excel内容

2.4 创建数据存储脚本

2.5  编辑器生成Asset 与属性面板详情

 2.6 Asset数据的使用方式

 三:Excel文件转成json 再以json的方式读取


一.DLL插件读取

1.1.Excel存放位置

UNITY--读取Excel的几种方式,Unity,unity-excel,unity读Excel,Excel文件读取,unity excel

如图 将命名为cook的excel文件存放在Assets根目录下

1.2.使用示例

using System.Data;
using System.IO;
using Excel;
using UnityEngine;

public class ExcelTool : MonoBehaviour
{
    void Start()
    {
        ReadExcel("/cook.xlsx");
    }

    public void ReadExcel(string xmlName)
    {
        FileStream stream = File.Open(Application.dataPath + xmlName, FileMode.Open, FileAccess.Read, FileShare.Read);
        //IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);//读取 Excel 1997-2003版本
        IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);//读取 2007及以后的版本

        DataSet result = excelReader.AsDataSet();

        if (stream != null)
        {
            stream.Close();
        }

        int[] counts = GetCount(result.Tables[0]);
        int rows = counts[0];
        int columns = counts[1];
        Debug.LogError("row:" + rows + "...col:" + columns);
        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < columns; j++)
            {
                Debug.LogError(result.Tables[0].Rows[i][j].ToString());
            }
        }
    }

    private int[] GetCount(DataTable dt)
    {
        int i = dt.Rows.Count;
        for (int m = 0; m < dt.Rows.Count; m++)
        {
            if (string.IsNullOrEmpty(dt.Rows[m][0].ToString()))
            {
                i = m;
                break;
            }
        }

        int j = dt.Columns.Count;
        for (int n = 0; n < dt.Columns.Count; n++)
        {
            if (string.IsNullOrEmpty(dt.Rows[0][n].ToString()))
            {
                j = n;
                break;
            }
        }
        return new int[] { i, j };
    }
}

1.3.Excel格式

UNITY--读取Excel的几种方式,Unity,unity-excel,unity读Excel,Excel文件读取,unity excel

 1.4.输出显示 

UNITY--读取Excel的几种方式,Unity,unity-excel,unity读Excel,Excel文件读取,unity excel

1.5.所需插件

需导入3个dll文件到Plugins文件夹下。

分别是:Excel.dll EPPlus.dll 和 ICSharpCode.SharpZipLib.dl

插件下载https://download.csdn.net/download/lalate/87401837UNITY--读取Excel的几种方式,Unity,unity-excel,unity读Excel,Excel文件读取,unity excel

⚠️注意:上述示例在安卓真机上运行是读取不到的,有解决了的同学欢迎评论补充,或者私信我

二.Excel转成Asset文件,再进行读取

2.1Excel文件存放位置

UNITY--读取Excel的几种方式,Unity,unity-excel,unity读Excel,Excel文件读取,unity excel

2.2 编辑模式生成Asset文件,并保存到指定位置 

using System;
using System.Reflection;
using UnityEditor;
using UnityEngine;

public class ExcelReadEditor : Editor
{
    [MenuItem("Excel/批量读表")]
    public static void ReadAllExcel()
    {
        Type typeInfo = typeof(ExcelReadEditor);

        MethodInfo[] methodInfo = typeInfo.GetMethods();
        foreach (MethodInfo mInfo in methodInfo)
        {
            if (mInfo.ToString().StartsWith("Void Create"))
            {
                mInfo.Invoke(null, null);
            }
        }
        Debug.Log("读取全部表成功");
    }

    [MenuItem("Excel/读取Decoration数据")]
    public static void CreateChapterData()
    {
        GetLocalData<LocalSheBei, Entity_SheBei>("SheBei");
        Debug.Log("读取Decoration数据成功");
    }

    //泛型创建 保存本地数据
    public static void GetLocalData<T, W>(string fileName) where T : LocalDataBase<W>
    {
        T t = CreateInstance<T>();
        string filePath = Application.dataPath + "/Excel/" + "cook-en" + ".xlsx";
        //string filePath = Path.GetFullPath(".") + "\\Excel\\" + "cook-en" + ".xlsx";
        t.data = ExcelRead.GetExcelData<W>(filePath, fileName);
        if (t.data == null) Debug.LogError("数据读取错误");

        string savePath = "Assets/Excel/Data/EN/" + fileName + ".asset";
        AssetDatabase.CreateAsset(t, savePath);
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();

        GetLocalDataCH<T, W>(fileName);
    }
    public static void GetLocalDataCH<T, W>(string fileName) where T : LocalDataBase<W>
    {
        T t = CreateInstance<T>();
        string filePath = Application.dataPath + "/Excel/" + "cook-ch" + ".xlsx";
        //string filePath = Path.GetFullPath(".") + "\\Excel\\" + "cook-ch" + ".xlsx";
        t.data = ExcelRead.GetExcelData<W>(filePath, fileName);
        if (t.data == null) Debug.LogError("数据读取错误");

        string savePath = "Assets/Excel/Data/CH/" + fileName + ".asset";
        AssetDatabase.CreateAsset(t, savePath);
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
    }
}

⚠️注意:要先在指定位置创建好父文件夹,此脚步要放在Editor文件夹下

UNITY--读取Excel的几种方式,Unity,unity-excel,unity读Excel,Excel文件读取,unity excel

2.3创建ExcelRead脚本,读取Excel内容

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

public class ExcelRead
{

    public static T[] GetExcelData<T>(string filePath, string name)
    {
        switch (name)
        {
            case "Entity_SheBei":
                return GetEntity_SheBei(filePath) as T[];
               //。。。
        }

        return null;
    }

    //设备
    private static Entity_SheBei[] GetEntity_SheBei(string filePath)
    {
        int columnNum = 0, rowNum = 0;
        DataRowCollection collect = ReadExcel(filePath, ref columnNum, ref rowNum, 1);
        List<Entity_SheBei> list = new List<Entity_SheBei>();

        for (int i = 1; i < rowNum; i++)
        {
            if (string.IsNullOrEmpty(collect[i][0].ToString()) || string.IsNullOrEmpty(collect[0][i].ToString())) break;
            Entity_SheBei data = new Entity_SheBei();
            data.name = collect[i][0].ToString();

            for (int j = 1; j < columnNum; j++)
            {
                //Debug.LogError(collect[i][j].ToString());
                data.parts.Add(collect[i][j].ToString());
            }

            list.Add(data);
        }

        return list.ToArray();
    }

    /// <summary>
    /// 读取excel文件内容 
    /// </summary>
    /// <param name="filePath">文件路径</param>
    /// <param name="columnNum">行数</param>
    /// <param name="rowNum">列数</param>
    /// <param name="table">第几张表</param>
    /// <returns></returns>
    static DataRowCollection ReadExcel(string filePath, ref int columnNum, ref int rowNum, int table = 0)
    {
        FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
        IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);

        DataSet result = excelReader.AsDataSet();
        //Tables[0] 下标0表示excel文件中第一张表的数据
        int[] counts = GetRowColumns(result.Tables[table]);
        //columnNum = result.Tables[table].Columns.Count;
        //rowNum = result.Tables[table].Rows.Count;
        rowNum = counts[0];
        columnNum = counts[1];
        Debug.LogError("行:" + rowNum + "...列:" + columnNum);
        return result.Tables[table].Rows;
    }


    private static int[] GetRowColumns(DataTable dt)
    {
        int i = dt.Rows.Count;
        for (int m = 0; m < dt.Rows.Count; m++)
        {
            if (string.IsNullOrEmpty(dt.Rows[m][0].ToString()))
            {
                i = m;
                break;
            }
        }

        int j = dt.Columns.Count;
        for (int n = 0; n < dt.Columns.Count; n++)
        {
            if (string.IsNullOrEmpty(dt.Rows[0][n].ToString()))
            {
                j = n;
                break;
            }
        }
        return new int[] { i, j };
    }
}

2.4 创建数据存储脚本

基类:

using UnityEngine;

public class LocalDataBase<T> : ScriptableObject
{
    public T[] data;
}

 子类:

public class LocalSheBei : LocalDataBase<Entity_SheBei>
{

}

 子类对应的实体类:

using System.Collections.Generic;

[System.Serializable]
public class Entity_SheBei
{
    public string name;
    public List<string> parts = new List<string>();
}

2.5  编辑器生成Asset 与属性面板详情

UNITY--读取Excel的几种方式,Unity,unity-excel,unity读Excel,Excel文件读取,unity excel

 UNITY--读取Excel的几种方式,Unity,unity-excel,unity读Excel,Excel文件读取,unity excel

 UNITY--读取Excel的几种方式,Unity,unity-excel,unity读Excel,Excel文件读取,unity excel

 UNITY--读取Excel的几种方式,Unity,unity-excel,unity读Excel,Excel文件读取,unity excel

 2.6 Asset数据的使用方式

  Resources.Load方式

UNITY--读取Excel的几种方式,Unity,unity-excel,unity读Excel,Excel文件读取,unity excel

 也可以定义一个单例类,直接拖拽:

UNITY--读取Excel的几种方式,Unity,unity-excel,unity读Excel,Excel文件读取,unity excel

public LocalSheBei Data_SheBei;
    //数据读取
    public void GetLocalData()
    {
        Debug.LogError(Data_SheBei.name + "..." + Data_SheBei.data.Length);
    }

 三:Excel文件转成json 再以json的方式读取

unity--json读取与解析文章来源地址https://www.toymoban.com/news/detail-807899.html

到了这里,关于UNITY--读取Excel的几种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity解析JSON的几种方式

    1.使用JsonUtility(Unity自带)解析数据 踩坑 2.使用Newtonsoft.Json dll解析json 链接: link 3.使用LitJson解析数据 4.传递给前端或后端 json

    2024年02月16日
    浏览(53)
  • Unity物体移动的几种方式

    主要是Vector3的内置函数以及CharacterController的Move 还有一个固定的每帧进行移动的操作

    2024年02月12日
    浏览(39)
  • Unity中人物移动的几种方式

    1.使用Transform组件         (1)transform.position(最基础,最常用): 这是通过上下左右键控制人物运动的方法          //获取水平按键,左键或A 则值为-1f,右键或D 则值为1f         horizontal = Input.GetAxis(\\\"Horizontal\\\");         //获取垂直按键,上键或W 则值为-1f,下键或S 则

    2023年04月15日
    浏览(36)
  • Unity按钮事件的几种绑定方式

    许久没有写C#代码了,对于一些东西自己给整忘了,在此记录下,方便以后自己查阅 获取到按钮组件,我是将代码挂载在其父节点上。 在代码中获取此按钮,并对他就进行绑定。一般都是使用的这类情况。 在脚本中写一个public函数,作为按钮的监听函数,在按钮的Inspector面

    2024年02月11日
    浏览(50)
  • Unity中获取游戏对象的几种方式

    在学习如何获取物体和组件时先明白说明什么是物体,组件和对象。 物体:unity中在层级显示的东西都可以叫做物体 组件:unity中提供了大量已经写好的组件,比如刚体,碰撞体等,自己 编写的脚本也是一种组件类 对象:挂载到物体上的脚本是一个实例化的组件,也就是一

    2024年01月17日
    浏览(38)
  • Unity笔记:数据持久化的几种方式

    主要方法: ScriptableObject PlayerPrefs JSON XML 数据库(如Sqlite) PlayerPrefs 存储的数据是 全局共享 的,它们存储在用户设备的本地存储中,并且可以被应用程序的所有部分访问。这意味着,无论在哪个场景、哪个脚本中,只要是同一个应用程序中的代码,都可以读取和修改 Playe

    2024年02月19日
    浏览(44)
  • Unity 常用的几种存档读档方式

    一、PlayerPrefs:数据持久化方案 常见的方法如下:  参考功能及代码: 通过单选框是否被勾选上,从而来决定是否播放背景音乐,代码如下: 二、二进制存储(字节流存储) 序列化:新建或打开一个二进制文件,通过二进制格式器将对象写入该二进制文件。 反序列化:打开

    2023年04月08日
    浏览(34)
  • 【unity】关于unity3D摄像机视角移动的几种方式详解

    目录 一、前言 二、Transform基础 1、几种坐标系 2、position和localPosition属性 3、rotation属性 三、摄像机的平移 1、键盘控制平移 2、鼠标控制平移 3、整合  四、摄像机的旋转 1、绕自身旋转 2、绕目标物体旋转 3、整合  五、优化功能 1、调整速率 2、切换目标物体 3、设置常用摄

    2024年02月04日
    浏览(41)
  • Unity物体移动的几种方式与表现(Lerp,SmoothDamp,MoveTowards的区别)

    看看Lerp,SmoothDamp,MoveTowards的区别。 Lerp用于插值,本身不是用于移动的API。但可以和协程配合用于移动。 SmoothDamp用于移动,是阻尼移动,从不超过。 MoveTowards用于移动,是匀速移动,也不会超过。 Lerp最简单的用法如下: 效果是非匀速的(逐渐逼近),可以看到在接近终

    2024年02月03日
    浏览(38)
  • C# 读取Excel的几种常见方式及实现步骤

    目录 1.使用 Microsoft Office Interop Excel 库 2.使用 OLEDB 数据库连接方式 3. 使用 EPPlus 库 在 C# 中,我们可以使用以下几种方式将 Excel 文件中的数据读取到 DataTable 中: 1.使用 Microsoft Office Interop Excel 库 这种方法需要安装 Microsoft Office,并且性能较低。具体实现步骤如下: 2.使用 O

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包