游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

教程分享

关注:791

当前位置:游戏蛮牛 技术专区 教程分享

查看: 796|回复: 14

[自学总结] Unity3D中使用C#完美读取Excel

[复制链接]  [移动端链接]
7日久生情
1656/5000
排名
1397
昨日变化
2

11

主题

237

帖子

1656

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
99182
好友
0
蛮牛币
2525
威望
0
注册时间
2015-5-10
在线时间
554 小时
最后登录
2018-11-11
发表于 2018-9-12 20:04:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 Kasug 于 2018-9-13 11:01 编辑

在开发中存储数据的形式很多,今天我们就来谈一下Excel文件的读取问题,很多开发者按照网上的教程读取Excel,在编辑器下完全没有问题,但是一旦发布成EXE或者到移动端,总是会出现非常奇怪的问题,而相关资料也是比较少。这里我就系统地做一次读取操作。

第一步:Building Setting中API设为NET 2.0
1.png



第二步:找到Unity3D安装目录下 Editor\Data\Mono\lib\mono\unity
将其中所有 I18N开头的文件复制到工程的Plugins中。

3.png

接着导入读取Excel必须的库,文末附上。导入后如下图
2.png



第三步:一定要区分EXCEL版本!!!
1. 读取
('97-2003 format; *.xls)的EXCEL用这个代码
IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
2. 读取(2007 format; *.xlsx)的EXCEL用这个代码
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);



好了,完成这三个步骤,就愉快地去读取EXCEL文件吧~注意在移动端的EXCEL读写需要写到沙盒路径哦。

下面附上一个读取.xls后缀的代码。
首先我们在Unity中创建一个Text用来显示读取到的内容。位置大小就随意啦~
4.png

然后在桌面新建一个.xls后缀的Excel文件,命名为XLSTest.xls 5.png


创建ReadExcel.cs脚本。在场景中新建空物体命名为ReadExcel并绑定此脚本
[C#] 纯文本查看 复制代码
using UnityEngine;
using UnityEngine.UI;
using Excel;
using System.Data;
using System.IO;
public class ReadExcel : MonoBehaviour
{

    private Text text;

    void Start()
    {
        text = FindObjectOfType<Text>();
        Read();

    }

    private void Read()
    {
        string path = Application.streamingAssetsPath + "/XLSTest.xls";

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

        IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
        DataSet result = excelReader.AsDataSet();

        int rows = result.Tables[0].Rows.Count;
        int cols = result.Tables[0].Columns.Count;
        text.text = "";
        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < cols; j++)
            {
                text.text += result.Tables[0].Rows[i][j].ToString() + "|";
            }
            text.text += "\n";
        }

    }
}



这里可能会出现一个错误:错误的原因是由于Excel的某些格子中没有内容导致。那这个时候我们来改动一下Read中的代码。
Error.png


[C#] 纯文本查看 复制代码
    private void Read()
    {
        string path = Application.streamingAssetsPath + "/XLSTest.xls";

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

        IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
        text.text = "";
        while (excelReader.Read())
        {
            for (int i = 0; i < excelReader.FieldCount; i++)
            {
                string value = excelReader.IsDBNull(i) ? "null" : excelReader.GetString(i);
                text.text += value + "|";
            }
            text.text += "\n";
        }
    }

可以看到此时成功地读取了数据

6.png

特别提醒:在编辑器下运行此代码时,一定不要打开被读取的Excel文件,否则会报一个错:
7.png

这个时候只需要关闭这个excel文件就好啦。读取.xlsx后缀的文件也是一样的操作,只需要替换 IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream)为IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream)就可以完成读取了。

接下来我们打包为EXE测试,非常完美~
End.png


象征性收5个B~~


读取Excel必备库.rar

471.4 KB, 下载次数: 27

售价: 5 蛮牛币  [记录]


回复

使用道具 举报

7日久生情
1806/5000
排名
2260
昨日变化
1

5

主题

719

帖子

1806

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
239879
好友
1
蛮牛币
3909
威望
0
注册时间
2017-8-26
在线时间
492 小时
最后登录
2018-11-6
发表于 2018-9-13 08:42:51 | 显示全部楼层

回复

使用道具 举报

6蛮牛粉丝
1231/1500
排名
1590
昨日变化
5

0

主题

163

帖子

1231

积分

Rank: 6Rank: 6Rank: 6

UID
137070
好友
0
蛮牛币
2451
威望
0
注册时间
2016-2-20
在线时间
300 小时
最后登录
2018-11-12
发表于 2018-9-13 09:55:10 | 显示全部楼层
66666
一直都读的xml和json,从没读过excel,涨见识了,感谢楼主分享!
[发帖际遇]: kckbkckb2 在网吧通宵,花了 3 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

5熟悉之中
811/1000
排名
2756
昨日变化
8

1

主题

66

帖子

811

积分

Rank: 5Rank: 5

UID
126588
好友
0
蛮牛币
3461
威望
0
注册时间
2015-10-24
在线时间
240 小时
最后登录
2018-11-12
发表于 2018-9-13 10:10:40 | 显示全部楼层
{:104:}{:104:}{:104:}{:104:}

回复 支持 反对

使用道具 举报

4四处流浪
487/500
排名
5509
昨日变化
40

1

主题

149

帖子

487

积分

Rank: 4

UID
245227
好友
0
蛮牛币
569
威望
0
注册时间
2017-9-21
在线时间
93 小时
最后登录
2018-11-12
发表于 2018-9-13 11:01:32 | 显示全部楼层
API要换回2.0 蛋疼啊
[发帖际遇]: tiancaiwlk 被钱袋砸中进医院,看病花了 2 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

7日久生情
1656/5000
排名
1397
昨日变化
2

11

主题

237

帖子

1656

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
99182
好友
0
蛮牛币
2525
威望
0
注册时间
2015-5-10
在线时间
554 小时
最后登录
2018-11-11
 楼主| 发表于 2018-9-13 11:02:48 | 显示全部楼层
kckbkckb2 发表于 2018-9-13 09:55
66666
一直都读的xml和json,从没读过excel,涨见识了,感谢楼主分享!
...

谢谢支持

回复 支持 反对

使用道具 举报

7日久生情
1656/5000
排名
1397
昨日变化
2

11

主题

237

帖子

1656

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
99182
好友
0
蛮牛币
2525
威望
0
注册时间
2015-5-10
在线时间
554 小时
最后登录
2018-11-11
 楼主| 发表于 2018-9-13 11:07:32 | 显示全部楼层
tiancaiwlk 发表于 2018-9-13 11:01
API要换回2.0 蛋疼啊

哈哈,项目必须读EXCEL那就没办法~没有存储要求还是用json和xml吧

回复 支持 反对

使用道具 举报

3偶尔光临
222/300
排名
8681
昨日变化
89

0

主题

44

帖子

222

积分

Rank: 3Rank: 3Rank: 3

UID
200493
好友
0
蛮牛币
1013
威望
0
注册时间
2017-1-11
在线时间
50 小时
最后登录
2018-11-12
发表于 2018-9-17 08:26:20 | 显示全部楼层
刚好需要的,谢谢!!!
[发帖际遇]: MengC 捡了钱没交公 蛮牛币 降了 3 . 幸运榜 / 衰神榜

回复

使用道具 举报

7日久生情
1689/5000
排名
19245
昨日变化
13

12

主题

781

帖子

1689

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
158776
好友
2
蛮牛币
181
威望
0
注册时间
2016-7-26
在线时间
871 小时
最后登录
2018-10-21
发表于 2018-9-17 09:12:14 | 显示全部楼层
楼主如果Excel里面的字体不同能不能读取?

回复 支持 反对

使用道具 举报

7日久生情
1656/5000
排名
1397
昨日变化
2

11

主题

237

帖子

1656

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
99182
好友
0
蛮牛币
2525
威望
0
注册时间
2015-5-10
在线时间
554 小时
最后登录
2018-11-11
 楼主| 发表于 2018-9-17 09:38:15 | 显示全部楼层
Hao521314 发表于 2018-9-17 09:12
楼主如果Excel里面的字体不同能不能读取?

这个我没测过哈,按理说字体只是表现形式,读取的都是行列里的字符串,不影响的。

回复 支持 反对

使用道具 举报

5熟悉之中
694/1000
排名
16339
昨日变化
8

0

主题

444

帖子

694

积分

Rank: 5Rank: 5

UID
199204
好友
0
蛮牛币
356
威望
0
注册时间
2017-1-5
在线时间
211 小时
最后登录
2018-11-2
发表于 2018-9-17 09:40:07 | 显示全部楼层
谢谢分享

回复

使用道具 举报

3偶尔光临
247/300
排名
11559
昨日变化
145

0

主题

70

帖子

247

积分

Rank: 3Rank: 3Rank: 3

UID
206155
好友
0
蛮牛币
208
威望
0
注册时间
2017-2-12
在线时间
99 小时
最后登录
2018-11-12
发表于 2018-9-17 14:53:16 | 显示全部楼层
很不错!学习一下!感谢楼主分享!

回复 支持 反对

使用道具 举报

7日久生情
1689/5000
排名
19245
昨日变化
13

12

主题

781

帖子

1689

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
158776
好友
2
蛮牛币
181
威望
0
注册时间
2016-7-26
在线时间
871 小时
最后登录
2018-10-21
发表于 2018-9-18 16:12:13 | 显示全部楼层
Kasug 发表于 2018-9-17 09:38
这个我没测过哈,按理说字体只是表现形式,读取的都是行列里的字符串,不影响的。 ...

有影响的,字体不同读不了。

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1422/1500
排名
2100
昨日变化
12

2

主题

376

帖子

1422

积分

Rank: 6Rank: 6Rank: 6

UID
213483
好友
0
蛮牛币
2619
威望
0
注册时间
2017-3-21
在线时间
416 小时
最后登录
2018-11-12
发表于 2018-9-26 15:48:48 | 显示全部楼层
谢谢楼主分享!!!!!
[发帖际遇]: NeedForSwag 乐于助人,奖励 2 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

排名
33683
昨日变化
42

0

主题

1

帖子

11

积分

Rank: 1

UID
293058
好友
0
蛮牛币
24
威望
0
注册时间
2018-8-9
在线时间
2 小时
最后登录
2018-10-20
发表于 2018-10-20 22:44:23 | 显示全部楼层
111111111111111111

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

关闭

站长推荐 上一条 /1 下一条

快速回复 返回顶部 返回列表