【Unity】安卓读取Excel配置表

总体思路就是 想办法先把配置表内容搞成.asset配置文件再打包

直接给个示例吧,感觉更方便看懂

比如工程目录下有个Excel表,路径如图所示(演示用,你也可以自己设置要放在哪,详见代码注释)

fd08bc0525044e50ad6f2f2c1e3b8b63.png

表的内容如下图,注意表的名称和Sheet名称,一会用得到

36a654eca55b4c53afd1f689501098d7.png

那就写代码呗,需要用到三个dll,分别是

EPPlus.dllhttps://github.com/mltqiao/UnityAssetsAndPackages/blob/main/Assets/Plugins/Excel%20Import%20Dlls/EPPlus.dll

Excel.dllhttps://github.com/mltqiao/UnityAssetsAndPackages/blob/main/Assets/Plugins/Excel%20Import%20Dlls/Excel.dll

ICSharpCode.SharpZipLib.dllhttps://github.com/mltqiao/UnityAssetsAndPackages/blob/main/Assets/Plugins/Excel%20Import%20Dlls/ICSharpCode.SharpZipLib.dll

想自己下就搜搜,懒得搜我也给你整了个github仓库,可以直接下

下载完放到Assets/Plugins路径里就行,如图

58a2dcea5c1e470092fa40e59dc0c3b6.png

然后搞个生成.asset配置文件功能的DataSamples.cs,放到Assets/Editor路径里

上代码吧

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

/// <summary>
/// 用来存放数据的结构体
/// </summary>
[System.Serializable]
public struct Sample
{
    public int ID;
    public string Name;
    public float Age;
}

/// <summary>
/// 用来存放多个结构体的List,并继承自ScriptableObject类
/// </summary>
public class DataSamples: ScriptableObject
{
    public List<Sample> samples;
}

public class SampleExcelAccess
{
    /// <summary>
    /// 读取Excel;需要添加Excel.dll、System.Data.dll;
    /// </summary>
    /// <param name="excelName">excel文件名</param>
    /// <param name="sheetName">sheet名称</param>
    /// <returns>DataRow的集合</returns>
    static DataRowCollection ReadExcel(string excelName, string sheetName)
    {
        // 设置需要读取的Excel的路径 我为了省事直接扔到工程目录/Assets里 你可以自己选择要读取的路径
        string path = Application.dataPath + "/" + excelName;
        FileStream stream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read);
        IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
        DataSet result = excelReader.AsDataSet();
        
        // 设置需要读取的Sheet
        // tables可以按照sheet名获取,也可以按照sheet索引获取
        // return result.Tables[0].Rows;
        return result.Tables[sheetName].Rows;
    }
    
    // 需要读取的Excel表的名字
    public static string Excel = "sample";
    
    public static List<Sample> ReadSampleExcel()
    {
        // 补全Excel表的名字
        string excelName = Excel + ".xlsx";
        // 选择想要读取的Excel表的Sheet名
        string sheetName = "Sample1";
        // 读取目标Excel表
        DataRowCollection collect = ReadExcel(excelName, sheetName);
        // 用下面创建的Sample结构体组成的List来存读到的内容
        List<Sample> collectedSampleArray = new List<Sample>();
        // 跳过第0行,从表的第1行开始,遍历每一行
        for (int i = 1; i < collect.Count; i++)
        {
            // 当本行的第0列没有内容时,跳过这一行(或中断break,根据自己表的内容的需要,也可以不写)
            if (collect[i][0].ToString() == null) continue;

            // 第0列为ID 第1列为姓名 第2列为年龄
            Sample sample = new Sample
            {
                ID = int.Parse(collect[i][0].ToString()),
                Name = collect[i][1].ToString(),
                Age = float.Parse(collect[i][2].ToString())
            };
            // 将这个结构体添加进List中
            collectedSampleArray.Add(sample);
        }
        return collectedSampleArray;
    }
}

// 继承自Editor类,需要UnityEditor引用
public class CreatSampleExcelAsset : Editor
{
    // 在Editor界面添加一个MenuItem来执行上面的代码
    [MenuItem("BuildAsset/Build ExcelSample Asset")]
    public static void BuildExcelSampleAsset()
    {
        DataSamples dataSamples = CreateInstance<DataSamples>();
        // 执行刚才写的那堆代码
        dataSamples.samples = SampleExcelAccess.ReadSampleExcel();
        // 输出的.asset路径和名称
        string path = "Assets/Resources/Data/SampleData.asset";
        // 创建.Asset
        AssetDatabase.CreateAsset(dataSamples, path);
        // 刷新Assets
        AssetDatabase.Refresh();
    }
}

找到刚才添加的按钮,点一下

a0803b9fc71e4435a7ea2eb05b755d07.png

然后就好了,在你设置的路径下面多了一个.asset配置文件,里面就是读到的Excel内容

9bbe2f9791fe4556808c6ef9315b54b7.png

然后就去看吧  Unity .Asset配置文件加载和读取_unity读取asset_LixiSchool的博客-CSDN博客

参考文档:Unity中安卓和IOS读取Excel表_小邹同学1的博客-CSDN博客

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Unity读取Excel配置文件的插件有很多,其中比较常用的有NPOI和ExcelDataReader。 NPOI是 Apache 的一个开源项目,它可以帮助我们在Unity读取、写入和操作Excel文件。NPOI提供了一系列的类和方法,可以很方便地打开Excel文件,读取其中的数据,并将其转换成对应的对象。我们只需要将NPOI的DLL文件导入到Unity项目中,并在代码中引入相关命名空间,就可以开始使用NPOI了。 另一个常用的插件是ExcelDataReader,它也是一个开源项目,可以在Unity读取Excel文件。与NPOI不同的是,ExcelDataReader不需要额外导入文件,它是直接在运行时解析Excel文件的。我们可以通过ExcelDataReader提供的API来打开Excel文件,并读取其中的数据。ExcelDataReader支持各种常见的Excel文件格式,包括XLS、XLSX等。 无论是使用NPOI还是ExcelDataReader,读取Excel配置文件的过程基本相似。首先,我们需要确定Excel文件的路径,然后使用相应的方法打开Excel文件。接下来,我们可以使用循环遍历的方式读取Excel格中的每一行,然后获取每个单元格的值。在读取Excel数据后,我们可以将其转化为我们需要的数据结构,例如数组、字典或自定义的对象。最后,我们可以根据读取到的数据进行相应的处理,例如初始化游戏的配置参数或生成游戏中的物体。 总之,Unity读取Excel配置文件的插件可以帮助我们方便地获取Excel中的数据,并在游戏中进行处理和应用。根据具体需求,我们可以选择合适的插件来实现读取Excel配置文件的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值