• 您(nín)的位置:首頁 > 新(xīn)聞動態 > Unity3D

    unity3d讀寫EXCEL文件的方法

    2019/11/12      點擊:

    對 Excel 表的操作少不了要引入第三方庫,首先我(wǒ)們需要引入 Excel.dll 和 ICSharpCode.SharpZipLib.dll,這兩個類庫在網上都能找(zhǎo)到;然後我們還需要(yào)引入 System.Data.dll,這(zhè)個類庫在(zài) Unity3D 的安裝路(lù)徑下的 Editor\Data\Mono\lib\mono\unity 文件(jiàn)夾下能找到。wiseglove數據手套客戶,可以在我(wǒ)們提(tí)供的數據手套FOR UNITY3D演示項目下(xià)找到。

    using Excel;
    using System.Data;
    using System.IO;
    using UnityEngine;
    public class Test : MonoBehaviour 
    {
        #region -- 變(biàn)量定義
        #endregion
        #region -- 係統函數
        private void Start()
        {
            DataRowCollection _dataRowCollection = ReadExcel(Application.streamingAssetsPath + "/手(shǒu)套錄製數據.xlsx");
            //這裏從 1 開(kāi)始循環,因為第一行被表頭占(zhàn)據了。所以具體解析(xī)數據(jù)的時候(hòu)需(xū)要根據具體情況來定。
            for (int i = 1; i < _dataRowCollection.Count; i++)
            {
                Debug.Log("拇指" + _dataRowCollection[i][0] + "--" + "食指" + _dataRowCollection[i][1] + "--" + "中指" + _dataRowCollection[i][2])+ "--" + "無名指" + _dataRowCollection[i][2])+ "--" + "小指" + _dataRowCollection[i][2]);
            } }
        #endregion    #region -- 自定義函數
        ////// 讀取 Excel 表並返回一(yī)個 DataRowCollection 對象
        //////手套錄製數據的Excel 表路(lù)徑///讀(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);//讀取 Excel 1997-2003版本
            IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);//讀取 2007及以後的版本(běn)
            DataSet result = excelReader.AsDataSet();
            return result.Tables[_sheetIndex].Rows;
        }
        ////// 讀取 Excel 表並返回(huí)一個 DataRowCollection 對象
        //////Excel 表路徑///讀取的 Sheet 名稱。Excel 表中是有多個 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版本(běn)
            IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);//讀取 2007及以後(hòu)的版(bǎn)本
            DataSet result = excelReader.AsDataSet();
            return result.Tables[_sheetName].Rows;
        }
        #endregion
    }

    這裏需要(yào)注意的是,根據 Excel 表的版本不同,使用的方法也(yě)不一致(zhì),我在代碼中也有注釋,大家(jiā)看一下(xià)就行。還有就是 Sheet ,在讀取的時(shí)候,我們可以根(gēn)據索引去讀取,也可以根據名稱去讀取,我也寫了重載方法。
     如果這樣寫,發布後運行,也許會報錯,這時我們就又需要引入第三方(fāng)庫了,去 Unity3D 安裝路徑(jìng)下的Editor\Data\Mono\lib\mono\unity,找到所有 I18N 開頭的類庫導入Unity中,就不會報錯(cuò)了。

    OK, 現在Excel 表的讀取功能解決了,那我們如何生成一張 Excel 表,並寫入數據呢?這時(shí)我們需要導入一個叫 EPPlus.dll 的類庫,網上也有,大家可以自己(jǐ)下載。
    代碼如下:

    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打(dǎ)開文件
            using (ExcelPackage package = new ExcelPackage(_excelName))
            {
                //在 excel 空文(wén)件添加新 sheet,並設置名稱。
                ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(_sheetName);
                //添加列名
                worksheet.Cells[1, 1].Value = "時間";
                worksheet.Cells[1, 2].Value = "拇指";
                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ī)行數據
                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;
                //添加一(yī)行數據(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;
                //保存excel
                package.Save();
            }
        }

    Excel 表的讀寫操作大致就是這樣的。因為(wéi) Excel 表 包(bāo)含太多的格式信息,好是將 Excel 表另存為純文本的 CSV 文件再去讀取,我們另一篇技術文(wén)章討論關於 CSV 文件的讀取。

    日本中出视频|午夜免费福利在线|亚洲精品亚洲人成在线下载|国产高潮流白浆免费观看不卡|偷拍亚洲欧美|亚洲中文字幕久爱亚洲伊人|久久久久香蕉视频|国产欧美日韩一区|久久国产成人亚洲精品影院老金|久久久久中文字幕