今天想弄个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文件(附源代码)的更多相关文章

  1. 读取Excel文件的两种方法

    第一种方法:传统方法,采用OleDB读取EXCEL文件, 优点:写法简单,缺点:服务器必须安有此组件才能用,不推荐使用 private DataSet GetConnect_DataSet2(stri ...

  2. C# 读取EXCEL文件的三种经典方法

    1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下: public DataSet ExcelToDS(string Path) { stri ...

  3. c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出

    c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出 using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using S ...

  4. ADO.NET 读取Excel文件,并作数据源

    项目中需要用的功能,贴上代码了. 需要注意的地方:配置Web.config的时候要注意版本问题! //若是在Web.config中配置数据源,如下 <add key="ExcelCon ...

  5. PHPExcel读取Excel文件的实现代码

    <?php require_once 'PHPExcel.php'; /**对excel里的日期进行格式转化*/ function GetData($val){ $jd = GregorianT ...

  6. .Net读取Excel文件时丢失数据的问题 (转载)

    相信很多人都试过通过OleDB读取Excel文件,这种方法效率十分高,只是有一点会让人十分头痛,就是当一列中既有混合型数据,又有纯数据时,往往容易丢失数据. 百度过后,改连接字符串 “HDR=YES; ...

  7. 使用jxl,poi读取excel文件

    作用:在java后台添加一个方法,读取导入的excel内容,根据需要返回相应的sql语句,以完成对临时表的插入操作. 使用jxl读取excel文件 package com.sixthf.bi.sapp ...

  8. C# 读取Excel文件里面的内容到DataSet

    摘要:读取Excel文件里面的内容到DataSet 代码: /// <summary> /// 读取Excel文件里面的内容到DataSet /// </summary> // ...

  9. R语言读取excel文件的3种方法

    R读取excel文件中数据的方法: 电脑有一个excel文件,原始的文件路径是:E:\R workshop\mydata\biom excel数据为5乘2阶矩阵,元素为                ...

随机推荐

  1. C#并行编程(1):理解并行

    什么是并行 并行是指两个或者多个事件在同一时刻发生. 在程序运行中,并行指多个CPU核心同时执行不同的任务:对于单核心CPU,严格来说是没有程序并行的.并行是为了提高任务执行效率,更快的获取结果. 与 ...

  2. C# 列出进程

    Process[] processes = Process.GetProcesses(); StringBuilder sb = new StringBuilder(); ; i < proce ...

  3. POJ.1743.Musical Theme(后缀数组 倍增 二分 / 后缀自动机)

    题目链接 \(Description\) 给定一段数字序列(Ai∈[1,88]),求最长的两个子序列满足: 1.长度至少为5 2.一个子序列可以通过全部加或减同一个数来变成另一个子序列 3.两个子序列 ...

  4. 深港DJ好听的歌曲

    好听女声 Dj陈爷-全中文全国语慢歌连版音乐挑选磁性女声翻唱慢摇串烧 http://www.vvvdj.com/play/154270.html DjPad仔-全中文国粤语Rnb音乐清风主流吃鸡学猫叫 ...

  5. PCB编译时出现的错误 ( Duplicate Net Names Wire N000-1 (Inferred)意思就是端口名字没有定义)

    再运行这个错误Duplicate Net Names Wire N000-1 (Inferred)的就没有了, 不过还有其他的 错误,有错误不用怕,关我的博客解决.

  6. 最小生成树之克鲁斯卡尔(kruskal)算法

    #include <iostream> #include <string> using namespace std; typedef struct MGraph{ string ...

  7. 图的基本操作(基于邻接矩阵):图的构造,深搜(DFS),广搜(BFS)

    #include <iostream> #include <stdio.h> #include <cstdlib> #include <cstring> ...

  8. C# 添加动态属性

    1.ExpandoObject(System.Dynamic) 2.JObject(Newtonsoft.Json.Linq)

  9. Delphi识别读取验证码

    unit OCR; interface uses Windows, SysUtils, Graphics, Classes, PNGImage, GIFImage, JPEG, Math, Asphy ...

  10. 你现在还在手动生成set,get方法吗?使用lombok

    JAVA面向对象编程中的封闭性和安全性.封闭性即对类中的域变量进行封闭操作,即用private来修饰他们,如此一来其他类则不能对该变量访问.这样我们就将这些变量封闭在了类内部,这样就提高了数据的安全性 ...