unity3d讀寫EXCEL文件的方法
對 Excel 表的操作少不了要引入第三方庫,首先我(wǒ)們需要(yào)引入 Excel.dll 和 ICSharpCode.SharpZipLib.dll,這兩個(gè)類庫在網上都能找到;然後我(wǒ)們還需要引入 System.Data.dll,這個類庫在(zài) Unity3D 的安裝(zhuāng)路徑下的 Editor\Data\Mono\lib\mono\unity 文件夾下能找到。wiseglove數據手套客戶,可以在我(wǒ)們提供的數據(jù)手套FOR UNITY3D演示項目下(xià)找到。
using Excel;
using System.Data;
using System.IO;
using UnityEngine;
public class Test : MonoBehaviour
{
#region -- 變量定義
#endregion
#region -- 係統(tǒng)函數
private void Start()
{
DataRowCollection _dataRowCollection = ReadExcel(Application.streamingAssetsPath + "/手套錄製數據.xlsx");
//這裏(lǐ)從 1 開始循環,因為第一行被表頭占據了(le)。所(suǒ)以具體解析數據(jù)的時候(hòu)需要(yào)根據具體(tǐ)情況來定。
for (int i = 1; i < _dataRowCollection.Count; i++)
{
Debug.Log("拇指" + _dataRowCollection[i][0] + "--" + "食(shí)指" + _dataRowCollection[i][1] + "--" + "中指" + _dataRowCollection[i][2])+ "--" + "無名指" + _dataRowCollection[i][2])+ "--" + "小指" + _dataRowCollection[i][2]);
} }
#endregion #region -- 自定義(yì)函數
////// 讀(dú)取 Excel 表並(bìng)返回一個 DataRowCollection 對象
//////手套錄製數(shù)據的Excel 表路徑///讀(dú)取的 Sheet 索引。Excel 表中是有多個 Sheet 的///private static DataRowCollection ReadExcel(string _path, int _sheetIndex = 0)
{
FileStream stream = File.Open(_path, FileMode.Open, FileAccess.Read, FileShare.Read);
//IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);//讀(dú)取 Excel 1997-2003版本
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);//讀取 2007及以後的版本
DataSet result = excelReader.AsDataSet();
return result.Tables[_sheetIndex].Rows;
}
////// 讀取(qǔ) Excel 表並返回一個(gè) DataRowCollection 對象
//////Excel 表路徑///讀取的 Sheet 名稱。Excel 表中是有多個(gè) Sheet 的///private static DataRowCollection ReadExcel(string _path, string _sheetName)
{
FileStream stream = File.Open(_path, FileMode.Open, FileAccess.Read, FileShare.Read);
//IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);//讀取 Excel 1997-2003版本
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);//讀取 2007及以後(hòu)的版本
DataSet result = excelReader.AsDataSet();
return result.Tables[_sheetName].Rows;
}
#endregion
}
這(zhè)裏需要注意的是,根據(jù) Excel 表的版(bǎn)本不同,使(shǐ)用的方法也(yě)不一致,我在代碼中也(yě)有注釋,大家看一下就行。還有就是 Sheet ,在讀取的時候,我們可以根據索引去讀取,也(yě)可以根據名稱去讀取,我也寫了重載方法。
如果這樣(yàng)寫,發布後運行(háng),也許會報錯,這時(shí)我們就又需要引入(rù)第三方庫了,去 Unity3D 安裝路徑下的Editor\Data\Mono\lib\mono\unity,找到(dào)所有 I18N 開頭的類庫導入Unity中,就不會報錯了。
OK, 現在(zài)Excel 表的讀取功能解決了,那我們如何生成一張 Excel 表,並寫入數據呢?這(zhè)時我們需要導入一個叫 EPPlus.dll 的類庫(kù),網上(shàng)也有,大家(jiā)可以自己下載。
代碼如下:
private void Start()
{
string _filePath = Application.streamingAssetsPath + "/錄製數(shù)據.xlsx";
string _sheetName = "詳情"; FileInfo _excelName = new FileInfo(_filePath);
if (_excelName.Exists)
{
//刪除舊文(wén)件,並創建一個新的(de) excel 文件。
_excelName.Delete();
_excelName = new FileInfo(_filePath);
} //通過ExcelPackage打開文件(jiàn)
using (ExcelPackage package = new ExcelPackage(_excelName))
{
//在 excel 空文件(jiàn)添加新 sheet,並設(shè)置名稱。
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(_sheetName);
//添(tiān)加列名
worksheet.Cells[1, 1].Value = "時間";
worksheet.Cells[1, 2].Value = "拇指";
worksheet.Cells[1, 3].Value = "中(zhōng)指";
worksheet.Cells[1, 4].Value = "無名指";
worksheet.Cells[1, 5].Value = "小指(zhǐ)";
//添(tiān)加一行數據
worksheet.Cells[2, 1].Value = 10; //ms
worksheet.Cells[2, 2].Value = 33.0f;
worksheet.Cells[2, 3].Value = 34.0f;
worksheet.Cells[2, 4].Value = 35.0f;
worksheet.Cells[2, 5].Value = 36.0f;
//添加一行數據
worksheet.Cells[3, 1].Value = 20; //ms
worksheet.Cells[3, 2].Value = 33.0f;
worksheet.Cells[3, 3].Value = 34.0f;
worksheet.Cells[3, 4].Value = 35.0f;
worksheet.Cells[3, 5].Value = 36.0f;
//添加一行數據(jù)
worksheet.Cells[4, 1].Value = 30; //ms
worksheet.Cells[4, 2].Value = 33.0f;
worksheet.Cells[4, 3].Value = 34.0f;
worksheet.Cells[4, 4].Value = 35.0f;
worksheet.Cells[4, 5].Value = 36.0f;
//保(bǎo)存excel
package.Save();
}
}
Excel 表的(de)讀寫操作大致就是這樣的。因為 Excel 表 包含太多的格式信息,好(hǎo)是(shì)將 Excel 表另存為純文本的 CSV 文件再去讀取,我們另一(yī)篇技術文章討論關於 CSV 文件的讀取。
- 上一篇:UNITY3D讀寫CVS格式文件錄製與存儲數據手套數據 2019/11/12
- 下一篇:UNITY3D使用C#腳本的幾種讀寫TXT文本(běn)文件的方法 2019/11/12
