Unity3D操作数据之Excel表操作(创建、读取、写入、修改)

叨唠两句:
首先使用Excel需要导入插件,其次在程序运行期间不要打开对应的Excel文件
其次相对于一些程序使用Excel比使用数据库更具有优势
读取主要使用Epplus插件,后续会推出关于Epplus的API讲解

一、前言

读取Excel文件,需要导入一些dll文件,才能进行操作Excel数据:
插件
如果打包发布还需要导入以下dll文件,否则打包后不能操作Excel
在(unity安装目录)C:Program FilesUnityEditorDataMonolibmonounity中可以找到
dll文件

dll文件下载地址:CSDN | 网盘

二、创建Excel文件

  • 首先,将需要用到的dll文件全部导入到项目的Plugins(必须此目录)文件夹目录下:
  • 添加引用:
    • using OfficeOpenXml;
    • using System.IO;
    • using Excel;
    • using System.Data;
  • 代码:
public void CreatExcel()
    {
        //文件地址
        FileInfo newFile = new FileInfo(Application.dataPath +"/test.xlsx");
        //如果文件存在删除重建
        if (newFile.Exists)
        {
            newFile.Delete();
            newFile = new FileInfo(Application.dataPath + "/test.xlsx");
        }

        //数据操作
        using (ExcelPackage package = new ExcelPackage(newFile))
        {
            //初次创建增加数据操作(重点在于这条操作语句不同)
            ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("test");

            //添加对应列名
            worksheet.Cells[1, 1].Value = "列名1";
            worksheet.Cells[1, 2].Value = "列名2";
            worksheet.Cells[1, 3].Value = "列名3";

            //保存
            package.Save();
        }
    }
  • 如果只想创建文件不写入表头,数据操作步骤可以省略
  • 运行结果创建Excel

三、写入数据

  • 添加数据
public void WriteExcel()
    {
        //文件地址
        FileInfo newFile = new FileInfo(Application.dataPath + "/test.xlsx");
        //数据操作
        using (ExcelPackage package = new ExcelPackage(newFile))
        {
            //增加数据操作(重点在于这条操作语句与初次创建添加数据不同)
            ExcelWorksheet worksheet = package.Workbook.Worksheets["test"];

            //添加第二行数据
            worksheet.Cells[2, 1].Value = "名称1";
            worksheet.Cells[2, 2].Value = "价格1";
            worksheet.Cells[2, 3].Value = "销量1";

            //添加第三行数据
            worksheet.Cells[3, 1].Value = "名称2";
            worksheet.Cells[3, 2].Value = "价格2";
            worksheet.Cells[4, 3].Value = "销量2";

            //保存
            package.Save();
        }
    }

运行结果:添加数据

  • 修改、删除数据
public void ChangeExcel()
    {
        //文件地址
        FileInfo newFile = new FileInfo(Application.dataPath + "/test.xlsx");

        //数据操作
        using (ExcelPackage package = new ExcelPackage(newFile))
        {
            ExcelWorksheet worksheet = package.Workbook.Worksheets["test"];

            //追加
            worksheet.Cells[4, 1].Value = "名称3";
            worksheet.Cells[4, 2].Value = "价格3";
            worksheet.Cells[4, 3].Value = "销量3";

            //删除某一列(参数:列的序号)
            worksheet.DeleteColumn(1);
            //删除某一行(参数:行的序号)
            worksheet.DeleteRow(1);

            //修改(和添加一样)
            worksheet.Cells[4, 1].Value = "修改名称";
            worksheet.Cells[4, 2].Value = "修改价格";
            worksheet.Cells[4, 3].Value = "修改销量";


            //保存
            package.Save();
        }
    }

四、读取文件

public void Reading()
    {
        //加载文件
        FileStream fileStream = File.Open(Application.dataPath + "/test.xlsx", FileMode.Open, FileAccess.Read);
        IExcelDataReader excelDataReader = ExcelReaderFactory.CreateOpenXmlReader(fileStream);
        DataSet result = excelDataReader.AsDataSet();

        // 获取表格有多少列
        int columns = result.Tables[0].Columns.Count;
        // 获取表格有多少行 
        int rows = result.Tables[0].Rows.Count;
		Debug.Log("共有:" + columns + "列 " + rows + "行");
		
        //第一行为表头,不读取。没有表头从0开始(获取数据)
        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < columns; j++)
            {
                // 获取表格中指定行指定列的数据 
                string value = result.Tables[0].Rows[i][j].ToString();
                Debug.Log(value);
            }
        }
        fileStream.Close();
    }

读取结果:读取结果

后言

  • 写入数据在第一行开始,读取数据在第0行开始
  • 遇到的问题欢迎在评论区打出,小编看到会在第一时间回复大家:
  • 工程文件地址:
    • CSDN:https://download.csdn.net/download/Xz616/87419887