推薦閱讀
- CSDN主頁
- GitHub開源地址
- Unity3D插件分享
- 簡書地址
- 我的個人博客
- QQ群:1040082875
大家好,我是佛系工程師☆恬靜的小魔龍☆,不定時更新Unity開發技巧,覺得有用記得一鍵三連哦,
一、前言
在程式開發中,經常會遇到要從外部檔案中讀取資料的情況,檔案型別也比較多,
于是,小魔龍就將常見的檔案型別:Txt、Json、Xml、Excel、Csv,讀取、修改、保存等常見操作代碼總結下來,
一方面可以自己復習,另一方面也希望可以幫助更多的人吧,
這是本系列文章第四篇:
【Unity3D讀取資料】(一)Txt檔案操作(創建、讀取、寫入、修改)
【Unity3D讀取資料】(二)Json檔案操作(創建、讀取、決議、修改)
【Unity3D讀取資料】(三)Xml檔案操作(創建、讀取、寫入、修改)
【Unity3D讀取資料】(四)Excel檔案操作(創建、讀取、寫入、修改)
【Unity3D讀取資料】(五)Csv檔案操作(創建、讀取、寫入、修改)
二、嘮叨兩句
讀取Excel檔案,需要匯入一些dll檔案,才能正常的讀取、創建Excell檔案:

這些檔案,我放到了CSDN按需下載:
https://download.csdn.net/download/q764424567/21046571
三、創建Excel檔案
首先,將需要用到的dll檔案全部匯入到專案的Plugins檔案夾目錄下:

然后撰寫代碼:
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();
}
}
}
運行結果:

我沒有安裝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;
}
}
運行結果:

五、修改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這種檔案版本就多,版本不同還讀取方法也不同,就很煩,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293821.html
標籤:其他
