Assets->Excel->表格名.xlsx(如Books.xlsx)
Assets->Plugins->三个dll文件EPPlus,Excel,ICSharpCode.SharpZipLib
Assets->Resources空文件夹
Assets->Script-》Books.cs
代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]//可序列化标签
public class Books
{
public uint id;
public string biaoqian;
public double jiage;
public string mingzi;
public uint shuliang;
}
public class Data : ScriptableObject
{
public Books[] books;
}
Assets->Editor-》ExcelRead(此为工具类)
代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Excel;
using System.Data;
using System.IO;
using UnityEditor;
using static Data;
public static class ExcelRead
{
//获取表里的数据
public static Books[] ReadBooksExcel(string filePath)
{
//用list存储避免一些空行的保存
List<Books> list = new List<Books>();
//行数列数
int columnNum = 0, rowNum = 0;
DataRowCollection collect = ReadExcel(filePath, ref columnNum, ref rowNum);
//这里i从1开始遍历,因为第一行是标签名
for(int i = 1; i < rowNum; i++)
{
//如果该行是空行 不保存
if (IsEmptyRow(collect[i], columnNum)) continue;
Books books =new Books();
uint.TryParse(collect[i][0].ToString(), out books.id);//解析
books.biaoqian = (collect[i][1].ToString());
double.TryParse(collect[i][2].ToString(), out books.jiage);
books.mingzi = (collect[i][3].ToString());
uint.TryParse(collect[i][4].ToString(),out books.shuliang);
list.Add(books);
}
return list.ToArray();
}
//判断是否是空行
static bool IsEmptyRow(DataRow collect, int columnNum)
{
for(int i = 0; i < columnNum; i++)
{
if (!collect.IsNull(i)) return false;//有数据
}
return true;//没数据true
}
/// <summary>
/// 读取excel文件内容获取行数 列数 方便保存
/// </summary>
/// <param name="filePath">文件路径</param>
/// <param name="columnNum">行数</param>
/// <param name="rowNum">列数</param>
/// <returns></returns>
static DataRowCollection ReadExcel(string filePath,ref int columnNum,ref int rowNum)
{
FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
DataSet result = excelReader.AsDataSet();
//tables[0]下标0表示excel文件中第一张表的数据
columnNum = result.Tables[0].Columns.Count;
rowNum = result.Tables[0].Rows.Count;
return result.Tables[0].Rows;
}
public class ExcelReadEditor : Editor
{
//读取excel的文件路径
public static readonly string filePath = Application.dataPath + "/Excel/" + "Book.xlsx";
[MenuItem("Excel/读取测试数据")]
public static void CreateSignInData()
{
Data manager = CreateInstance<Data>(); //数据载体
manager.books = ExcelRead.ReadBooksExcel(filePath);
string path = "Assets/Resources/" + "Book.asset"; //保存到Resources文件下
AssetDatabase.CreateAsset(manager, path);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
Debug.Log("读取数据成功");
}
}
}