using System.Data; using System.IO; using System.Collections.Generic; #if UNITY_EDITOR using Excel; #endif using UnityEngine; public class ExcelParser { /// /// 读取表数据,生成对应的数组 /// /// excel文件全路径 /// Item数组 public static List CreateItemArrayWithExcel(string pFilePath) { int tColNum = 0, tRowNum = 0; Debug.Log(pFilePath); DataRowCollection collect = ReadExcelContext(pFilePath, ref tColNum, ref tRowNum); Debug.Log("列数: " + tColNum + " ,行数: " + tRowNum); // 第一行变量名,循环列 //for (int i = 0; i < tColNum; i++) //{ //} //第二行开始才是数据,循环行 List tList = new List(tRowNum - 1); for (int i = 1; i < tRowNum; i++) { LevelData tItem = new LevelData(); //解析每列的数据 tItem.LevelID = 0; int.TryParse(collect[i][0].ToString(), out tItem.LevelID); tItem.FirstNum = 0; int.TryParse(collect[i][1].ToString(), out tItem.FirstNum); tItem.Retry1Num = 0; int.TryParse(collect[i][2].ToString(), out tItem.Retry1Num); tItem.Retry2Num = 0; int.TryParse(collect[i][3].ToString(), out tItem.Retry2Num); tItem.TotalNum = 0; int.TryParse(collect[i][4].ToString(), out tItem.TotalNum); tItem.UnitNum = 0; int.TryParse(collect[i][5].ToString(), out tItem.UnitNum); tItem.MaxLevel = 0; int.TryParse(collect[i][6].ToString(), out tItem.MaxLevel); tItem.Formation = string.IsNullOrEmpty(collect[i][8].ToString()) ? "" : collect[i][8].ToString(); tList.Add(tItem); } return tList; } /// /// 读Excel /// /// 文件路径 /// 行数 /// 列数 /// static DataRowCollection ReadExcelContext(string pFilePath, ref int pColNum, ref int pRowNum) { #if UNITY_EDITOR FileStream stream = File.Open(pFilePath, FileMode.Open, FileAccess.Read, FileShare.Read); IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream); DataSet result = excelReader.AsDataSet(); // Tables[0] 下标0表示excel文件中第一张表的数据 pColNum = result.Tables[0].Columns.Count; pRowNum = result.Tables[0].Rows.Count; return result.Tables[0].Rows; #else return null; #endif } }