[Unity對Excel的讀取]
阿新 • • 發佈:2019-01-04
做專案突然想優化一下資料的輸入方式,並不想用程式碼一行一行的插入,感覺很low。
於是就想到用excel來做,先把資料寫好在excel中,然後來個批匯入,一個foreach就能把資料讀到我們要維護的資料結構裡。
廢話不多說,來看看怎麼做。首先你得去Excel的官網下載他的動態連結庫:一個Excel.dll,一個ICSharpCode.SharpZipLib.dll,然後放在專案目錄下,最好是在plugins下。
當然,這是你會注意到還有一個叫做system.data的東西,沒錯這也是需要我們去弄的dll.
不過這個dll不需要下載,這屬於.net自帶的東西,Unity的源目錄就有,這裡就不得不吐槽一下Unity,講道理這個應該直接新增依賴就可以了,但是會出現一個找不到名稱空間的bug,anyway,在他的原目錄下ctrl+f找一下,把這個dll也要拷到工程目錄下。
好的接下來就是上程式碼了。
首先是名稱空間的引用:
using UnityEngine;
using System.Collections;
using Excel;
using System.Data;
using System.IO;
using System.Collections.Generic;
接著你需要定義一個自己的結構,這個取決於你的excel表到底放了些啥,我的excel表每行只有兩個屬性,所以我定義了:public struct DepenceTableData
{
public string word;
public string instruct;
};
接著我們首先讀取檔案變成一個dataset型的變數:
接著對於我們比較主要的屬性是dataset下的table[0],這裡記錄著真正的資料,以及一些總行數,總列數的資訊:static DataSet ReadExcel(string path) { FileStream stream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read); IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); DataSet result = excelReader.AsDataSet(); return result; }
public static List<DepenceTableData> Load(string path) { List<DepenceTableData> _data = new List<DepenceTableData> (); DataSet resultds = ReadExcel (path); int columns = resultds.Tables[0].Columns.Count; int rows = resultds.Tables[0].Rows.Count; for (int i = 1; i < rows; i++) { DepenceTableData temp_data; temp_data.instruct = resultds.Tables [0].Rows [i] [0].ToString(); temp_data.word = resultds.Tables [0].Rows [i] [1].ToString (); _data.Add (temp_data); } return _data; }
.rows後面這個索引就可以按二維陣列來理解了。
效果圖:
這是我的excel:
接著是把連結串列往控臺寫了寫:
沒截圖完,但可以看出所有資訊輸出了。