121 lines
3.4 KiB
C#
121 lines
3.4 KiB
C#
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
|
||
{
|
||
/// <summary>
|
||
/// 区划编号
|
||
/// </summary>
|
||
public string divisionNumber;
|
||
/// <summary>
|
||
/// 区划名称
|
||
/// </summary>
|
||
public string districtName;
|
||
/// <summary>
|
||
/// 省级区划编号
|
||
/// </summary>
|
||
public string provincialDivisionNumber;
|
||
/// <summary>
|
||
/// 省级名称
|
||
/// </summary>
|
||
public string provinceName;
|
||
/// <summary>
|
||
/// 市级区划编号
|
||
/// </summary>
|
||
public string cityLevelZoningNumber;
|
||
/// <summary>
|
||
/// 市级名称
|
||
/// </summary>
|
||
public string cityLevelName;
|
||
/// <summary>
|
||
/// 区级区划编号
|
||
/// </summary>
|
||
public string districtLevelDivisionNumber;
|
||
/// <summary>
|
||
/// 区级名称
|
||
/// </summary>
|
||
public string districtLevelName;
|
||
/// <summary>
|
||
/// 层级
|
||
/// </summary>
|
||
public string level;
|
||
}
|
||
|
||
public class ExcelConfig
|
||
{
|
||
/// <summary>
|
||
/// 存放excel表文件夹的的路径,本例xecel表放在了"Assets/Excels/"当中
|
||
/// </summary>
|
||
public static readonly string excelsFolderPath = Application.dataPath + "/Excels/";
|
||
|
||
/// <summary>
|
||
/// 存放Excel转化CS文件的文件夹路径
|
||
/// </summary>
|
||
public static readonly string assetPath = "Assets/Resources/";
|
||
}
|
||
|
||
public class ExcelTool
|
||
{
|
||
|
||
/// <summary>
|
||
/// 读取表数据,生成对应的数组
|
||
/// </summary>
|
||
/// <param name="filePath">excel文件全路径</param>
|
||
/// <returns>Item数组</returns>
|
||
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;
|
||
}
|
||
|
||
/// <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;
|
||
}
|
||
}
|