Unity读取Excel文件(附源代码)

今天想弄个Unity读取Excel的功能的,发现网上有许多方法,采用其中一种方法:加入库文件 Excel.dll 和ICSharpCode.SharpZipLib.dll库文件,(还有System.Data.dll也要拷贝进来,在Unity安装路径C:\Program Files\Unity\Editor\Data\Mono\lib\mono\unity中),代码下载链接在最后。

Unity读取Excel文件(附源代码)

使用时要注意1997-2003和2007版本的脚本不一样:

Unity读取Excel文件(附源代码)

然后编写脚本DoExcel.cs:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using System.Data;

using System.IO;

using Excel;

public class DoExcel {

public static DataSet ReadExcel(string path)

{

FileStream stream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read);

// CreateOpenXmlReader用于读取Excel2007版本及以上的文件

IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);

DataSet result = excelReader.AsDataSet();

excelReader.Close();

return result;

}

public static List<DepenceTableData> Load(string path)

{

List<DepenceTableData> _data = new List<DepenceTableData>();

DataSet resultds = ReadExcel(path);

int column = resultds.Tables[0].Columns.Count;

int row = resultds.Tables[0].Rows.Count;

Debug.LogWarning(column + "  " + row);

for(int i=1;i<row;i++)

{

DepenceTableData temp_data;

temp_data.instruct = resultds.Tables[0].Rows[i][0].ToString();

temp_data.word = resultds.Tables[0].Rows[i][1].ToString();

Debug.Log(temp_data.instruct + "  " + temp_data.word);

_data.Add(temp_data);

}

return _data;

}

}

public struct DepenceTableData

{

public string word;

public string instruct;

}

再写一个脚本PrintExcel.cs

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

public class PrintExcel : MonoBehaviour {

public List<DepenceTableData> listdata;

void Start () {

Text T = GameObject.Find("Canvas/Text").GetComponent<Text>();

T.text = "";//清空一开始的文本

listdata = DoExcel.Load(Application.dataPath + "\\Data\\" + "Test2007.xlsx");

foreach(var listing in listdata)

{

print(listing.instruct + "     " + listing.word);

T.text += (listing.instruct + "     " + listing.word + "\n").ToString();

}

}

}

编写Excel如下:

Unity读取Excel文件(附源代码)

层级视图如下:

Unity读取Excel文件(附源代码)

Test2007.xlsx放到新建的Data文件夹下;

将PrintExcel拖拽到Main Camera脚本中,添加Canvas->Text用于显示Excel提取的文本,编辑器运行如下:

Unity读取Excel文件(附源代码)

发布时打开调试功能:

Unity读取Excel文件(附源代码)

问题是发布exe之后,然后需要手动添加Excel文件到***_Data下,例如我的Excel放在Data文件夹:

Unity读取Excel文件(附源代码)

Unity读取Excel文件(附源代码)

运行后发现不能打开文件,报错了!

Unity读取Excel文件(附源代码)

发现需要添加I18N*.dll等一些列dll才能打开。添加时可以在编辑器的Plugins添加,也可以发布后在***_Data/Managed下面添加这些dll。

这些dll来自Unity安装路径C:\Program Files\Unity\Editor\Data\Mono\lib\mono\unity中。

Unity读取Excel文件(附源代码)

Unity读取Excel文件(附源代码)

添加好之后,便可以显示文本!!!如下所示。

Unity读取Excel文件(附源代码)

如果用

FileStream stream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read);

IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);

打开Excel1997-2003文件。会发现不能显示中文和字母,发布后也不能显示,加上I18N*.dll也不能显示。把Excel的编码格式改成UTF-8也不能显示。

Unity读取Excel文件(附源代码)

Unity读取Excel文件(附源代码)

Unity读取Excel文件(附源代码)

打开Excel1997-2003文本显示如下,中文和字母不能显示:

Unity读取Excel文件(附源代码)

查了一些资料都不能解决这个问题,奇了怪了,有谁知道的交流一下啊!

工程源代码下载路径:http://download.csdn.net/detail/u011423279/9865038

采用Unity5.5.1开发的,请用相近的版本打开,如果打开奔溃或报错,则将工程下的Assets和ProjectSettings保留,其他全部删除再重新打开

Unity读取Excel文件(附源代码)

上一篇:运维 03 Linux之文档与目录结构


下一篇:面试 -- Http协议相关(转载)