6.读取Excel目录下所有Excel文件

  1. 6.Excel表自动生成相关文件-读取Excel目录下所有Excel文件
    1. 6.1 知识点
      1. 创建ExcelTool类
      2. 在ExcelTool类中定义了一个常量EXCEL_PATH,表示Excel文件存放的路径。
      3. 创建为GenerateExcelInfo静态方法,使用[MenuItem]特性为GenerateExcelInfo方法创建了一个菜单项,用于在Unity编辑器中手动触发Excel数据生成的操作。
      4. GenerateExcelInfo方法中首先通过Directory.CreateDirectory方法得到了存放Excel文件的目录对象dInfo,CreateDirectory方法如果存在对应路径的话会返回目录对象,否则会创建对应目录。
      5. 获取目录中的所有文件信息,即Excel文件,保存在FileInfo数组files中。
      6. 初始化一个DataTableCollection对象tableConllection用于存储读取到的Excel表格数据。
      7. 对目录中的所有文件信息进行遍历,判断文件的扩展名是否是.xlsx或.xls,如果是则继续处理,否则跳过该文件。使用FileStream打开Excel文件流,并使用ExcelReaderFactory.CreateOpenXmlReader方法创建一个IExcelDataReader实例Excel文件数据对象excelReader。将Excel文件数据对象读取为DataSet对象,并获取其中的数据表集合,将其赋值给tableConllection。关闭文件流。遍历tableConllection中的每个数据表table,输出当前表格的名称,即Debug.Log(table.TableName)。之后遍历表的每条循环中,根据表格数据生成数据结构类,容器类和二进制数据。
    2. 6.2 知识点代码

6.Excel表自动生成相关文件-读取Excel目录下所有Excel文件


6.1 知识点

创建ExcelTool类

public class ExcelTool
{
}

在ExcelTool类中定义了一个常量EXCEL_PATH,表示Excel文件存放的路径。

/// <summary>
/// excel文件存放的路径
/// </summary>
public static string EXCEL_PATH = Application.dataPath + "/ArtRes/Excel/";

创建为GenerateExcelInfo静态方法,使用[MenuItem]特性为GenerateExcelInfo方法创建了一个菜单项,用于在Unity编辑器中手动触发Excel数据生成的操作。

[MenuItem("GameTool/GenerateExcel")]
private static void GenerateExcelInfo()
{
}

GenerateExcelInfo方法中首先通过Directory.CreateDirectory方法得到了存放Excel文件的目录对象dInfo,CreateDirectory方法如果存在对应路径的话会返回目录对象,否则会创建对应目录。

//加载指定路径中的所有Excel文件 用于生成对应的3个文件 CreateDirectory方法如果存在对应路径的话会返回目录对象
DirectoryInfo dInfo = Directory.CreateDirectory(EXCEL_PATH);

获取目录中的所有文件信息,即Excel文件,保存在FileInfo数组files中。

//得到指定路径中的所有文件信息 相当于就是得到所有的Excel表
FileInfo[] files = dInfo.GetFiles();

初始化一个DataTableCollection对象tableConllection用于存储读取到的Excel表格数据。

//数据表容器
DataTableCollection tableConllection;

对目录中的所有文件信息进行遍历,判断文件的扩展名是否是.xlsx或.xls,如果是则继续处理,否则跳过该文件。使用FileStream打开Excel文件流,并使用ExcelReaderFactory.CreateOpenXmlReader方法创建一个IExcelDataReader实例Excel文件数据对象excelReader。将Excel文件数据对象读取为DataSet对象,并获取其中的数据表集合,将其赋值给tableConllection。关闭文件流。遍历tableConllection中的每个数据表table,输出当前表格的名称,即Debug.Log(table.TableName)。之后遍历表的每条循环中,根据表格数据生成数据结构类,容器类和二进制数据。

  • 注意:
    • excelReader.AsDataSet()得到的是DataSet 代表整个Excel文件的数据
    • excelReader.AsDataSet().Tables得到的是tableConllection tableConllection是DataTable集合 代表的是一个是Excel文件中的子表集合
    • 比如PlayerInfo和Sheet2都算一个子表 对应数据结构是一个DataTable 只不过Sheet2是空而已
//遍历所有文件
for (int i = 0; i < files.Length; i++)
{
    //如果不是excel文件就不要处理了
    if (files[i].Extension != ".xlsx" &&
        files[i].Extension != ".xls")
        continue;

    //打开一个 Excel 文件并获取其中的所有表的数据
    using (FileStream fs = files[i].Open(FileMode.Open, FileAccess.Read))
    {
        //创建 ExcelDataReader 实例 调用ExcelReaderFactory的CreateOpenXmlReader方法读取文件流
        IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(fs);

        //将 Excel 数据读取为 DataSet 对象,并获取其中的数据表集合
        tableConllection = excelReader.AsDataSet().Tables;

        fs.Close();
    }

    //遍历文件中的所有表的信息
    foreach (DataTable table in tableConllection)
    {
        Debug.Log(table.TableName);

        //生成数据结构类

        //生成容器类

        //生成2进制数据
    }

}

6.2 知识点代码

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

public class ExcelTool
{
    /// <summary>
    /// excel文件存放的路径
    /// </summary>
    public static string EXCEL_PATH = Application.dataPath + "/ArtRes/Excel/";

    [MenuItem("GameTool/GenerateExcel")]
    private static void GenerateExcelInfo()
    {
        //加载指定路径中的所有Excel文件 用于生成对应的3个文件 CreateDirectory方法如果存在对应路径的话会返回目录对象
        DirectoryInfo dInfo = Directory.CreateDirectory(EXCEL_PATH);

        //得到指定路径中的所有文件信息 相当于就是得到所有的Excel表
        FileInfo[] files = dInfo.GetFiles();

        //数据表容器
        DataTableCollection tableConllection;

        //遍历所有文件
        for (int i = 0; i < files.Length; i++)
        {
            //如果不是excel文件就不要处理了
            if (files[i].Extension != ".xlsx" &&
                files[i].Extension != ".xls")
                continue;

            //打开一个 Excel 文件并获取其中的所有表的数据
            using (FileStream fs = files[i].Open(FileMode.Open, FileAccess.Read))
            {
                //创建 ExcelDataReader 实例 调用ExcelReaderFactory的CreateOpenXmlReader方法读取文件流
                IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(fs);

                //将 Excel 数据读取为 DataSet 对象,并获取其中的数据表集合
                tableConllection = excelReader.AsDataSet().Tables;

                fs.Close();
            }

            //遍历文件中的所有表的信息
            foreach (DataTable table in tableConllection)
            {
                Debug.Log(table.TableName);

                //生成数据结构类

                //生成容器类

                //生成2进制数据
            }

        }
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏