【游戏技术群】959392658  【游戏出海群】12067810
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

教程分享

关注:798

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

查看: 1338|回复: 17

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

[复制链接]  [移动端链接]
7日久生情
1893/5000
排名
1178
昨日变化
3

13

主题

260

帖子

1893

积分

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

UID
99182
好友
0
蛮牛币
3413
威望
0
注册时间
2015-5-10
在线时间
648 小时
最后登录
2019-1-21
发表于 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, 下载次数: 45

售价: 5 蛮牛币  [记录]


回复

使用道具 举报

7日久生情
1926/5000
排名
2051
昨日变化
7

5

主题

740

帖子

1926

积分

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

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

回复

使用道具 举报

6蛮牛粉丝
1384/1500
排名
1386
昨日变化
2

0

主题

177

帖子

1384

积分

Rank: 6Rank: 6Rank: 6

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

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1001/1500
排名
2299
昨日变化
4

1

主题

103

帖子

1001

积分

Rank: 6Rank: 6Rank: 6

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

回复 支持 反对

使用道具 举报

5熟悉之中
645/1000
排名
4451
昨日变化
31

1

主题

200

帖子

645

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

7日久生情
1893/5000
排名
1178
昨日变化
3

13

主题

260

帖子

1893

积分

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

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

谢谢支持

回复 支持 反对

使用道具 举报

7日久生情
1893/5000
排名
1178
昨日变化
3

13

主题

260

帖子

1893

积分

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

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

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

回复 支持 反对

使用道具 举报

4四处流浪
365/500
排名
5765
昨日变化
38

0

主题

45

帖子

365

积分

Rank: 4

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

回复

使用道具 举报

7日久生情
1701/5000
排名
19703
昨日变化
15

12

主题

781

帖子

1701

积分

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

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

回复 支持 反对

使用道具 举报

7日久生情
1893/5000
排名
1178
昨日变化
3

13

主题

260

帖子

1893

积分

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

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

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

回复 支持 反对

使用道具 举报

5熟悉之中
818/1000
排名
16725
昨日变化
7

0

主题

539

帖子

818

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

4四处流浪
309/500
排名
10060
昨日变化
3

0

主题

82

帖子

309

积分

Rank: 4

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

回复 支持 反对

使用道具 举报

7日久生情
1701/5000
排名
19703
昨日变化
15

12

主题

781

帖子

1701

积分

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

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

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

回复 支持 反对

使用道具 举报

7日久生情
1581/5000
排名
1875
昨日变化
4

2

主题

414

帖子

1581

积分

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

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

回复

使用道具 举报

排名
34475
昨日变化
22

0

主题

1

帖子

11

积分

Rank: 1

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

回复 支持 反对

使用道具 举报

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

本版积分规则

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