码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-06-08 22:30:21      阅读:4044      评论:0      收藏:0      [点我收藏+]

标签:stream   ref   rpc   脚本   打开   return   添加   using   style   

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

技术分享

 

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

技术分享

 

 

 

然后编写脚本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如下:

技术分享

 

 

 

层级视图如下:

技术分享

 

 

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

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

 技术分享

 

发布时打开调试功能:

 

 技术分享

 

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

技术分享

技术分享

 

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

 技术分享

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

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

 技术分享

技术分享

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

技术分享

如果用

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

        IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);

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

 技术分享

技术分享

技术分享

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

 技术分享

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

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

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

 技术分享

 

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

标签:stream   ref   rpc   脚本   打开   return   添加   using   style   

原文地址:http://www.cnblogs.com/XRTSDUT2008/p/6964856.html

(0)
(2)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!