[Unity对Excel的读取]

     做项目突然想优化一下数据的输入方式,并不想用代码一行一行的插入,感觉很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型的变量:

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;  
		}
接着对于我们比较主要的属性是dataset下的table[0],这里记录着真正的数据,以及一些总行数,总列数的信息:
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:




接着是把链表往控台写了写:


没截图完,但可以看出所有信息输出了。

猜你喜欢

转载自blog.csdn.net/qq_33999892/article/details/71891575