• unity3d读写EXCEL文件的方法

    2019/11/12      点击:

    对 Excel 表的操作少不了要引入第三方库,首先我们需要引入 Excel.dll 和 ICSharpCode.SharpZipLib.dll,这两个类(lèi)库(kù)在网上(shàng)都能找到;然后我们还需要引(yǐn)入(rù) System.Data.dll,这个类库在 Unity3D 的安(ān)装路径下的 Editor\Data\Mono\lib\mono\unity 文件夹下(xià)能找到。wiseglove数据手套客户,可以在我们提供(gòng)的数据手套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 开始循(xún)环,因(yīn)为(wéi)第一行被表头占据(jù)了(le)。所以具体(tǐ)解析数据的时候(hòu)需要根据具体情(qíng)况来定。
            for (int i = 1; i < _dataRowCollection.Count; i++)
            {
                Debug.Log("拇指" + _dataRowCollection[i][0] + "--" + "食指" + _dataRowCollection[i][1] + "--" + "中(zhōng)指" + _dataRowCollection[i][2])+ "--" + "无名指" + _dataRowCollection[i][2])+ "--" + "小指" + _dataRowCollection[i][2]);
            } }
        #endregion    #region -- 自定(dìng)义函数
        ////// 读取 Excel 表并(bìng)返回一个 DataRowCollection 对象
        //////手(shǒu)套录制数(shù)据的Excel 表(biǎo)路径///读取的 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版(bǎn)本
            IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);//读取 2007及以后的版(bǎn)本
            DataSet result = excelReader.AsDataSet();
            return result.Tables[_sheetIndex].Rows;
        }
        ////// 读取 Excel 表并返回一个 DataRowCollection 对象
        //////Excel 表路(lù)径(jìng)///读(dú)取的 Sheet 名(míng)称。Excel 表中是有多个 Sheet 的(de)///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及以后的版本
            DataSet result = excelReader.AsDataSet();
            return result.Tables[_sheetName].Rows;
        }
        #endregion
    }

    这里需要(yào)注意的是,根据 Excel 表的版本不同,使用的方法也不(bú)一(yī)致,我在代码中也有注释,大家看一下就行。还有就(jiù)是 Sheet ,在读(dú)取的时候,我们可以根据索引去读取,也可以根据(jù)名称去读取,我也写了重载方法(fǎ)。
     如果这样(yàng)写,发布后运行,也许会报错,这时我们就又需要引入第三(sān)方库了(le),去 Unity3D 安装路径下的(de)Editor\Data\Mono\lib\mono\unity,找到所有 I18N 开头的类库导入Unity中,就不会报错了。

    OK, 现(xiàn)在Excel 表的读取(qǔ)功能解决了,那我们如何(hé)生成(chéng)一张 Excel 表,并(bìng)写入数据呢?这时我们需要导入一个叫(jiào) EPPlus.dll 的类库,网上也有,大家可(kě)以自己下载(zǎi)。
    代(dài)码如下:

    private void Start()
        {
            string _filePath = Application.streamingAssetsPath + "/录制数据.xlsx";
            string _sheetName = "详情(qíng)";        FileInfo _excelName = new FileInfo(_filePath);
            if (_excelName.Exists)
            {
                //删除旧文件,并创建一个新的 excel 文件。
                _excelName.Delete();
                _excelName = new FileInfo(_filePath);
            }        //通过ExcelPackage打开文件
            using (ExcelPackage package = new ExcelPackage(_excelName))
            {
                //在 excel 空文件添加新 sheet,并设(shè)置名称。
                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 = "无(wú)名指";
                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;
                //添加一行数据
                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;
                //保存(cún)excel
                package.Save();
            }
        }

    Excel 表的读写(xiě)操作大致就是这样的。因为 Excel 表 包含太多的格式(shì)信息,好是将 Excel 表另存为(wéi)纯文本的 CSV 文件再去读取,我们另一篇技术文章讨论关于 CSV 文件的读取。

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