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
    }
}