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