使用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.34f1c1EditorDataMonoBleedingEdgelibmonounityjit
  2. 找到以下dll
    I18N.CJK.dll 、I18N.dll、I18N.MidEast.dll
    I18N.Other.dll、I18N.Rare.dll、I18N.West.dll
  3. 将这些dll放入打包后的文件中
    XXXX_DataManaged
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
https://zhuanlan.zhihu.com/p/144381462

)">
下一篇>>