小鸟游星野
小鸟游星野
Published on 2025-05-02 / 10 Visits
0
0

Unity二进制读取excel文件

using Excel;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.IO;
using UnityEditor;
using UnityEngine;

public class LessonExcelRead
{
    #region 知识点一 打开Excel表
    //主要知识点:
    //1.FileStream读取文件流
    //2.IExcelDataReader类,从流中读取Excel数据
    //3.DataSet 数据集合类 将Excel数据转存进其中方便读取

    [MenuItem("GameTool/打开Excel表")]
    private static void OpenExcel()
    {
        using (FileStream fs = File.Open(Application.dataPath + "/ArtRes/Excel/PlayerInfo.xlsx", FileMode.Open, FileAccess.Read ))
        {
            //通过我们的文件流获取Excel数据
            IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(fs);
            //将excel表中的数据转换为DataSet数据类型 方便我们 获取其中的内容
            DataSet result = excelReader.AsDataSet();
            //得到Excel文件中的所有表信息
            for (int i = 0; i < result.Tables.Count; i++)
            {
                Debug.Log("表名:" + result.Tables[i].TableName);
                Debug.Log("行数:" + result.Tables[i].Rows.Count);
                Debug.Log("列数:" + result.Tables[i].Columns.Count);
            }
            fs.Close();
        }
    }

    #endregion

    #region 知识点二 获取Excel表中单元格的信息
    //主要知识点:
    //1.FileStream读取文件流
    //2.IExcelDataReader类,从流中读取Excel数据
    //3.DataSet 数据集合类 将Excel数据转存进其中方便读取
    //4.DataTable 数据表类 表示Excel文件中的一个表
    //5.DataRow 数据行类 表示某张表中的一行数据
    [MenuItem("GameTool/读取Excel里的具体信息")]
    private static void ReadExcel()
    {
        using (FileStream fs = File.Open(Application.dataPath + "/ArtRes/Excel/PlayerInfo.xlsx", FileMode.Open, FileAccess.Read))
        {
            IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(fs);
            DataSet result = excelReader.AsDataSet();

            for (int i = 0; i < result.Tables.Count; i++)
            {
                //得到其中一张表的具体数据
                DataTable table = result.Tables[i];
                //得到其中一行的数据
                //DataRow row = table.Rows[0];
                //得到行中某一列的信息
                //Debug.Log(row[1].ToString());
                DataRow row;
                for (int j = 0; j < table.Rows.Count; j++)
                {
                    //得到每一行的信息
                    row = table.Rows[j];
                    Debug.Log("*********新的一行************");
                    for (int k = 0; k < table.Columns.Count; k++)
                    {
                        Debug.Log(row[k].ToString());
                    }
                }
            }

            fs.Close();
        }
    }
    #endregion

    #region 知识点三 获取Excel表中信息对于我们的意义?
    //既然我们能够获取到Excel表中的所有数据
    //那么我们可以根据表中数据来动态的生成相关数据
    //1.数据结构类
    //2.容器类
    //3.2进制数据

    //为什么不直接读取Excel表而要把它转成2进制数据
    //1.提升读取效率
    //2.提升数据安全性
    #endregion

    // Start is called before the first frame update
 
}


Comment