using Excel; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.IO; using UnityEditor; using UnityEngine; [Serializable] public class CityExcelData { public CityItem[] cityItems; } [Serializable] public class CityItem { /// /// 区划编号 /// public string divisionNumber; /// /// 区划名称 /// public string districtName; /// /// 省级区划编号 /// public string provincialDivisionNumber; /// /// 省级名称 /// public string provinceName; /// /// 市级区划编号 /// public string cityLevelZoningNumber; /// /// 市级名称 /// public string cityLevelName; /// /// 区级区划编号 /// public string districtLevelDivisionNumber; /// /// 区级名称 /// public string districtLevelName; /// /// 层级 /// public string level; } public class ExcelConfig { /// /// 存放excel表文件夹的的路径,本例xecel表放在了"Assets/Excels/"当中 /// public static readonly string excelsFolderPath = Application.dataPath + "/Excels/"; /// /// 存放Excel转化CS文件的文件夹路径 /// public static readonly string assetPath = "Assets/Resources/"; } public class ExcelTool { /// /// 读取表数据,生成对应的数组 /// /// excel文件全路径 /// Item数组 public static CityItem[] CreateItemArrayWithExcel(string filePath) { //获得表数据 int columnNum = 0, rowNum = 0; DataRowCollection collect = ReadExcel(filePath, ref columnNum, ref rowNum); //根据excel的定义,第二行开始才是数据 CityItem[] array = new CityItem[rowNum - 1]; for (int i = 1; i < rowNum; i++) { CityItem item = new CityItem(); //解析每列的数据 item.divisionNumber = collect[i][0].ToString(); item.districtName = collect[i][1].ToString(); item.provincialDivisionNumber = collect[i][2].ToString(); item.provinceName = collect[i][3].ToString(); item.cityLevelZoningNumber = collect[i][4].ToString(); item.cityLevelName = collect[i][5].ToString(); item.districtLevelDivisionNumber = collect[i][6].ToString(); item.districtLevelName = collect[i][7].ToString(); item.level = collect[i][8].ToString(); array[i - 1] = item; } return array; } /// /// 读取excel文件内容 /// /// 文件路径 /// 行数 /// 列数 /// 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; } }