Unity3D中Excel表的讀取與寫入


 

廢話不多說,對 Excel 表的操作少不了要引入第三方庫,首先我們需要引入 Excel.dll 和 ICSharpCode.SharpZipLib.dll,這兩個類庫在網上都能找到;然后我們還需要引入 System.Data.dll,這個類庫在 Unity3D 的安裝路徑下的 Editor\Data\Mono\lib\mono\unity 文件夾下能找到。

代碼如下:

 1 using Excel;
 2 using System.Data;
 3 using System.IO;
 4 using UnityEngine;
 5 
 6 public class Test : MonoBehaviour 
 7 {
 8     #region -- 變量定義
 9 
10     #endregion
11 
12     #region -- 系統函數
13     private void Start()
14     {
15         DataRowCollection _dataRowCollection = ReadExcel(Application.streamingAssetsPath + "/學生信息.xlsx");
16         //這里從 1 開始循環,因為第一行被表頭占據了。所以具體解析數據的時候需要根據具體情況來定。
17         for (int i = 1; i < _dataRowCollection.Count; i++)
18         {
19             Debug.Log("學號:" + _dataRowCollection[i][0] + "--" + "姓名:" + _dataRowCollection[i][1] + "--" + "年齡:" + _dataRowCollection[i][2]);
20         }
21     }
22     #endregion
23 
24     #region -- 自定義函數
25     /// <summary>
26     /// 讀取 Excel 表並返回一個 DataRowCollection 對象
27     /// </summary>
28     /// <param name="_path">Excel 表路徑</param>
29     /// <param name="_sheetIndex">讀取的 Sheet 索引。Excel 表中是有多個 Sheet 的</param>
30     /// <returns></returns>
31     private static DataRowCollection ReadExcel(string _path, int _sheetIndex = 0)
32     {
33         FileStream stream = File.Open(_path, FileMode.Open, FileAccess.Read, FileShare.Read);
34         //IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);//讀取 Excel 1997-2003版本
35         IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);//讀取 2007及以后的版本
36         DataSet result = excelReader.AsDataSet();
37         return result.Tables[_sheetIndex].Rows;
38     }
39     /// <summary>
40     /// 讀取 Excel 表並返回一個 DataRowCollection 對象
41     /// </summary>
42     /// <param name="_path">Excel 表路徑</param>
43     /// <param name="_sheetIndex">讀取的 Sheet 名稱。Excel 表中是有多個 Sheet 的</param>
44     /// <returns></returns>
45     private static DataRowCollection ReadExcel(string _path, string _sheetName)
46     {
47         FileStream stream = File.Open(_path, FileMode.Open, FileAccess.Read, FileShare.Read);
48         //IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);//讀取 Excel 1997-2003版本
49         IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);//讀取 2007及以后的版本
50         DataSet result = excelReader.AsDataSet();
51         return result.Tables[_sheetName].Rows;
52     }
53     #endregion
54 
55 }

運行效果如下:

這里需要注意的是,根據 Excel 表的版本不同,使用的方法也不一致,我在代碼中也有注釋,大家看一下就行。還有就是 Sheet ,在讀取的時候,我們可以根據索引去讀取,也可以根據名稱去讀取,我也寫了重載方法。

 如果這樣寫,發布后運行,也許會報錯,這時我們就又需要引入第三方庫了,去 Unity3D 安裝路徑下的Editor\Data\Mono\lib\mono\unity,找到所有 I18N 開頭的類庫導入Unity中,就不會報錯了,如下圖:

 

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

代碼如下:

 1 private void Start()
 2     {
 3         string _filePath = Application.streamingAssetsPath + "/學生信息2.xlsx";
 4         string _sheetName = "詳情";
 5 
 6         FileInfo _excelName = new FileInfo(_filePath);
 7         if (_excelName.Exists)
 8         {
 9             //刪除舊文件,並創建一個新的 excel 文件。
10             _excelName.Delete();
11             _excelName = new FileInfo(_filePath);
12         }
13 
14         //通過ExcelPackage打開文件
15         using (ExcelPackage package = new ExcelPackage(_excelName))
16         {
17             //在 excel 空文件添加新 sheet,並設置名稱。
18             ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(_sheetName);
19 
20             //添加列名
21             worksheet.Cells[1, 1].Value = "學號";
22             worksheet.Cells[1, 2].Value = "姓名";
23             worksheet.Cells[1, 3].Value = "性別";
24  
25             //添加一行數據
26             worksheet.Cells[2, 1].Value = 100001;
27             worksheet.Cells[2, 2].Value = "張三";
28             worksheet.Cells[2, 3].Value = "";
29 
30             //添加一行數據
31             worksheet.Cells[3, 1].Value = 100002;
32             worksheet.Cells[3, 2].Value = "Hammer";
33             worksheet.Cells[3, 3].Value = "";
34 
35             //添加一行數據
36             worksheet.Cells[4, 1].Value = 120033;
37             worksheet.Cells[4, 2].Value = "Saw";
38             worksheet.Cells[4, 3].Value = "";
39 
40             //保存excel
41             package.Save();
42         }
43     }

運行效果圖如下:

Excel 表的讀寫操作大致就是這樣的。但是我不建議,大家直接讀取 Excel 表,因為 Excel 表 包含太多的格式信息,最好是將 Excel 表另存為純文本的 CSV 文件再去讀取,關於 CSV 文件的讀取,網上有一大堆,有時間我自己也寫一篇。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM