0
点赞
收藏
分享

微信扫一扫

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

大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

一、前言

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

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

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

这是本系列文章第四篇:

​​【Unity3D读取数据】(一)Txt文档操作(创建、读取、写入、修改)​​

​​【Unity3D读取数据】(二)Json文件操作(创建、读取、解析、修改)​​

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

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

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

二、唠叨两句

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

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

三、创建Excel文件

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

【Unity3D读取数据】(四)Excel文件操作(创建、读取、写入、修改)_原力计划_02

然后编写代码:

using OfficeOpenXml;
using System.IO;
using UnityEngine;

public class Demo5 : MonoBehaviour
{
void Start()
{
string _filePath = Application.streamingAssetsPath + "/学生信息.xlsx";
string _sheetName = "详情";

FileInfo _excelName = new FileInfo(_filePath);
if (_excelName.Exists)
{
//删除旧文件,并创建一个新的 excel 文件。
_excelName.Delete();
_excelName = new FileInfo(_filePath);
}

//通过ExcelPackage打开文件
using (ExcelPackage package = new ExcelPackage(_excelName))
{
//在 excel 空文件添加新 sheet,并设置名称。
ExcelWorksheet 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();
}
}
}

运行结果:

【Unity3D读取数据】(四)Excel文件操作(创建、读取、写入、修改)_原力计划_03

我没有安装office,直接用WPS打开的文件,格式没有问题。

四、读取Excel文件

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

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

public class Demo5 : MonoBehaviour
{
void Start()
{
DataRowCollection _dataRowCollection = ReadExcel(Application.streamingAssetsPath + "/学生信息.xlsx");
for (int i = 0; i < _dataRowCollection.Count; i++)
{
Debug.Log(_dataRowCollection[i][0] + " " + _dataRowCollection[i][1] + " " + _dataRowCollection[i][2]);
}
}

//通过表的索引,返回一个DataRowCollection表数据对象
private DataRowCollection ReadExcel(string _path, int _sheetIndex = 0)
{
FileStream stream = File.Open(_path, FileMode.Open, FileAccess.Read, FileShare.Read);
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
DataSet result = excelReader.AsDataSet();
return result.Tables[_sheetIndex].Rows;
}

//通过表的名字,返回一个DataRowCollection表数据对象
private DataRowCollection ReadExcel(string _path, string _sheetName)
{
FileStream stream = File.Open(_path, FileMode.Open, FileAccess.Read, FileShare.Read);
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
DataSet result = excelReader.AsDataSet();
return result.Tables[_sheetName].Rows;
}
}

运行结果:

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

五、修改Excel数据

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

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

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

public class Demo5 : MonoBehaviour
{
void Start()
{
string path = Application.streamingAssetsPath + "/学生信息.xlsx";
UpdateExcel(path);
}

private void UpdateExcel(string filePath)
{
FileInfo _excelName = new FileInfo(filePath);
using (ExcelPackage package = new ExcelPackage(_excelName))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets["详情"];
//修改某一行的数据
worksheet.Cells[4, 3].Value = "女";
//保存excel
package.Save();
}
}
}

六、后言

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

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



举报

相关推荐

0 条评论