【Unity3D读取数据】(四)Excel文件操作(创建、读取、写入、修改)

一、前言

在程序开发中,经常会遇到要从外部文件中读取数据的情况,文件类型也比较多。

常见的文件类型:Txt、Json、Xml、Excel、Csv,读取、修改、保存等常见操作代码总结下来。

一方面可以自己复习,另一方面也希望可以帮助更多的人吧。

这是本系列文章第四篇:
【Unity3D读取数据】(一)Txt文档操作(创建、读取、写入、修改)
【Unity3D读取数据】(二)Json文件操作(创建、读取、解析、修改)
【Unity3D读取数据】(三)Xml文件操作(创建、读取、写入、修改)
【Unity3D读取数据】(四)Excel文件操作(创建、读取、写入、修改)
【Unity3D读取数据】(五)Csv文件操作(创建、读取、写入、修改)

二、唠叨两句

读取Excel文件,需要导入一些dll文件,才能正常的读取、创建Excell文件:

这些文件,我放到了CSDN按需下载:https://download.csdn.net/download/shymayumi/33155658

三、创建Excel文件

首先,将需要用到的dll文件全部导入到项目的Plugins文件夹目录下:

然后编写代码:

using OfficeOpenXml;
using System.IO;
using UnityEngine;

public class CreateExcel : MonoBehaviour
{
    private void Start()
        {
            Create();
        }

        /// <summary>
        /// 创建表格
        /// </summary>
        private static void Create()
        {
            var filePath = Application.streamingAssetsPath + "/学生信息.xlsx";
            const string sheetName = "详情";
 
            var excelName = new FileInfo(filePath);
            if (excelName.Exists)
            {
                //删除旧文件,并创建一个新的 excel 文件。
                excelName.Delete();
                excelName = new FileInfo(filePath);
            }
 
            //通过ExcelPackage打开文件
            using var package = new ExcelPackage(excelName);
            //在 excel 空文件添加新 sheet,并设置名称。
            using var worksheet = package.Workbook.Worksheets.Add(sheetName);
 
            //添加列名
            worksheet.Cells[1, 1].Value = "学号";
            worksheet.Cells[1, 2].Value = "姓名";
            worksheet.Cells[1, 3].Value = "性别";
 
            //添加一行数据
            worksheet.Cells[2, 1].Value = 100001;
            worksheet.Cells[2, 2].Value = "张三";
            worksheet.Cells[2, 3].Value = "男";
 
            //添加一行数据
            worksheet.Cells[3, 1].Value = 100002;
            worksheet.Cells[3, 2].Value = "李四";
            worksheet.Cells[3, 3].Value = "女";
 
            //添加一行数据
            worksheet.Cells[4, 1].Value = 120033;
            worksheet.Cells[4, 2].Value = "Saw";
            worksheet.Cells[4, 3].Value = "男";
 
            //保存excel
            package.Save();
        }
}


运行结果:

四、读取Excel文件

读取Excel,主要操作就是先用IO命名空间里面的文件读取类以文件流形式读取文件,然后再从dll里面的API去转化数据保存下来,然后使用DataSet数据结构保存数据:

using Excel;
using System.Data;
using System.IO;
using UnityEngine;

public class ReadExcelData : MonoBehaviour
{
    private void Start()
        {
            var dataRowCollection = ReadExcel(Application.streamingAssetsPath + "/学生信息.xlsx");
            for (var i = 0; i < dataRowCollection.Count; i++)
            {
                Debug.Log(dataRowCollection[i][0] + " " + dataRowCollection[i][1] + " " + dataRowCollection[i][2]);
            }
        }
 
        /// <summary>
        /// 通过表的索引,返回一个DataRowCollection表数据对象
        /// </summary>
        /// <param name="path">路径</param>
        /// <param name="sheetIndex">索引</param>
        /// <returns></returns>
        private static DataRowCollection ReadExcel(string path, int sheetIndex = 0)
        {
            using var stream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read);
            using var excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
            using var result = excelReader.AsDataSet();
            return result.Tables[sheetIndex].Rows;
        }
 
        /// <summary>
        /// 通过表的名字,返回一个DataRowCollection表数据对象
        /// </summary>
        /// <param name="path">路径</param>
        /// <param name="sheetName">表格名字</param>
        /// <returns></returns>
        private DataRowCollection ReadExcel(string path, string sheetName)
        {
            using var stream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read);
            var excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
            using var result = excelReader.AsDataSet();
            return result.Tables[sheetName].Rows;
        }
}


运行结果:


五、修改Excel数据

修改Excel数据,首先需要知道自己要修改的哪一行那一列的数据,如果是全部修改,不如将原来的Excel删除,然后再构建一个,如果只是修改某行某列的数据的话,可以使用下面的方法:

比如,修改4行3列的数据:

using OfficeOpenXml;
using System.IO;
using UnityEngine;

public class ModifyData : MonoBehaviour
{
    private void Start()
        {
            var path = Application.streamingAssetsPath + "/学生信息.xlsx";
            UpdateExcel(path);
        }
 
        /// <summary>
        /// 更新表格数据信息
        /// </summary>
        /// <param name="filePath">路径</param>
        private static void UpdateExcel(string filePath)
        {
            var excelName = new FileInfo(filePath);
            using var package = new ExcelPackage(excelName);
            using var worksheet = package.Workbook.Worksheets["详情"];
            //修改某一行的数据
            worksheet.Cells[4, 3].Value = "女";
            //保存excel
            package.Save();
        }

修改前:

修改后:

六、后言

读取Excel需要引入DLL,然后不同的Excel版本,可能也会出现一些奇奇怪怪的问题。

本来Excel这种文件版本就多,版本不同还读取方法也不同,就很烦。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值