环境
Unity:2021.3.6f1c1
EPPlus:5.8.14 net.3.5
准备
- 使用Nuget下载EPPlus,找到 net3.5中的EPPlus.dll文件,导入Unity的Plugins文件夹
- 创建一个xlsx(excel)文件,测试内容如下图
. - 表格内容解释
第一行解释第二行的内容,
第二行对应变量名称,后续使用反射设置变量的值
第三行和第四行成员变量需要设置的内容
"学生信息"是表单的名称,后续使用该名称获取表中的数据
测试脚本
- 加载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表格没有加载成功";}}
}
- 测试数据类
[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数据
解决方法
- 找到Unity编辑器的安装路径
例如:
2019.4.34f1c1\Editor\Data\MonoBleedingEdge\lib\mono\unityjit - 找到以下dll
I18N.CJK.dll 、I18N.dll、I18N.MidEast.dll
I18N.Other.dll、I18N.Rare.dll、I18N.West.dll - 将这些dll放入打包后的文件中
XXXX_Data\Managed