使用EPPlus加载excel数据

环境

Unity:2021.3.6f1c1
EPPlus:5.8.14 net.3.5

准备

  1. 使用Nuget下载EPPlus,找到 net3.5中的EPPlus.dll文件,导入Unity的Plugins文件夹
  2. 创建一个xlsx(excel)文件,测试内容如下图
    . 在这里插入图片描述
  3. 表格内容解释
    第一行解释第二行的内容,
    第二行对应变量名称,后续使用反射设置变量的值
    第三行和第四行成员变量需要设置的内容
    "学生信息"是表单的名称,后续使用该名称获取表中的数据

测试脚本

  1. 加载excel数据,数据内容显示在窗口
using OfficeOpenXml;
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Text;
using UnityEngine;
using UnityEngine.UI;
public class TestEpplus : MonoBehaviour
{
    string filePath = "C:\\Users\\Administrator\\Desktop\\班级信息.xlsx";

    [SerializeField] Text text;

    void Start()
    {
        text.text = "数据加载中...";
        var infos = ExcelData.CreateObjsFormExcel(filePath);

        if (infos != null)
        {
            var length = infos.Count;
            StringBuilder stringBuilder = new StringBuilder();

            for (int i = 0; i < length; i++)
            {
                stringBuilder.Append(infos[i].ToString());

                if (i != length - 1)
                    stringBuilder.Append("\n");

            }

            text.text = stringBuilder.ToString();
        }
        else
        {
            text.text = "excel表格没有加载成功";
        }
    }
}
  1. 测试数据类
[System.Serializable]
public class ExcelData
{
    public string grade;
    public string name;
    public int age;
    public bool isMale;

    public static List<ExcelData> CreateObjsFormExcel(string path)
    {
        List<ExcelData> gradeData = new List<ExcelData>() { Capacity = 4 };

        Type type = typeof(ExcelData);

        using (var package = new ExcelPackage(new FileInfo(path)))
        {
            //获取工作表
            ExcelWorksheet excelWorksheet = package.Workbook.Worksheets["学生信息"];

            //获取excel表格行列信息  
            var dimension = excelWorksheet.Dimension;

            //行
            int begin = dimension.Start.Row;
            int end = dimension.End.Row;

            //列
            int columnBegin = dimension.Start.Column;
            int columnEnd = dimension.End.Column;

            //逐行 注意行列不是从零开始
            //+2 从第三行开始获取对应成员的值
            for (int i = begin + 2; i <= end; i++)
            {
                ExcelData excelData = new ExcelData();
                //逐列
                for (int j = columnBegin; j <= columnEnd; j++)
                {
                    //GetValue方法获取表格中的值
                    //根据字符串 反射成员变量信息 
                    FieldInfo fieldInfo = type.GetField(excelWorksheet.GetValue(2, j).ToString());

                    //设置对象成员变量的值
                    //使用ChangeType将表格中的值转换为对应类型
                    fieldInfo.SetValue(excelData, Convert.ChangeType(excelWorksheet.GetValue(i, j), fieldInfo.FieldType));
                }
                gradeData.Add(excelData);
            }
        }
        return gradeData;
    }

    public override string ToString()
    {
        return "班级:" + grade + "、姓名:" + name + "、年龄:" + age + "、性别:" + (isMale == true ? "男。" : "女。");
    }
}

编辑器中运行

在这里插入图片描述

发布后运行

发布后运行,不能加载excel数据

解决方法

  1. 找到Unity编辑器的安装路径
    例如:
    2019.4.34f1c1\Editor\Data\MonoBleedingEdge\lib\mono\unityjit
  2. 找到以下dll
    I18N.CJK.dll 、I18N.dll、I18N.MidEast.dll
    I18N.Other.dll、I18N.Rare.dll、I18N.West.dll
  3. 将这些dll放入打包后的文件中
    XXXX_Data\Managed
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值