Unity读取Excel文件(附源代码)
今天想弄个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文件(附源代码)的更多相关文章
- 读取Excel文件的两种方法
第一种方法:传统方法,采用OleDB读取EXCEL文件, 优点:写法简单,缺点:服务器必须安有此组件才能用,不推荐使用 private DataSet GetConnect_DataSet2(stri ...
- C# 读取EXCEL文件的三种经典方法
1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下: public DataSet ExcelToDS(string Path) { stri ...
- c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出
c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出 using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using S ...
- ADO.NET 读取Excel文件,并作数据源
项目中需要用的功能,贴上代码了. 需要注意的地方:配置Web.config的时候要注意版本问题! //若是在Web.config中配置数据源,如下 <add key="ExcelCon ...
- PHPExcel读取Excel文件的实现代码
<?php require_once 'PHPExcel.php'; /**对excel里的日期进行格式转化*/ function GetData($val){ $jd = GregorianT ...
- .Net读取Excel文件时丢失数据的问题 (转载)
相信很多人都试过通过OleDB读取Excel文件,这种方法效率十分高,只是有一点会让人十分头痛,就是当一列中既有混合型数据,又有纯数据时,往往容易丢失数据. 百度过后,改连接字符串 “HDR=YES; ...
- 使用jxl,poi读取excel文件
作用:在java后台添加一个方法,读取导入的excel内容,根据需要返回相应的sql语句,以完成对临时表的插入操作. 使用jxl读取excel文件 package com.sixthf.bi.sapp ...
- C# 读取Excel文件里面的内容到DataSet
摘要:读取Excel文件里面的内容到DataSet 代码: /// <summary> /// 读取Excel文件里面的内容到DataSet /// </summary> // ...
- R语言读取excel文件的3种方法
R读取excel文件中数据的方法: 电脑有一个excel文件,原始的文件路径是:E:\R workshop\mydata\biom excel数据为5乘2阶矩阵,元素为 ...
随机推荐
- Android应用开发-网络编程(一)
网络图片查看器 1. 确定图片的网址 2. 发送http请求 URL url = new URL(address); // 获取客户端和服务器的连接对象,此时还没有建立连接 HttpURLConnec ...
- 4513: [Sdoi2016]储能表 数位DP
国际惯例的题面: 听说这题的正解是找什么规律,数位DP是暴力......好的,我就写暴力了QAQ.我们令f[i][la][lb][lc]表示二进制从高到低考虑位数为i(最低位为1),是否顶n上界,是否 ...
- CodeForces903G Yet Another Maxflow Problem 扫描线 + 线段树 + 最小割
给定两条链\(A, B\),其中\(A\)链某些点向\(B\)链有连边,支持修改\(A\)链中的某条边权以及查询\(A_1\)到\(B_n\)的最大流 显而易见,\(A\)和\(B\)链中一定满足左部 ...
- 潭州课堂25班:Ph201805201 爬虫高级 第二课 sclapy 框架 (课堂笔记)
win 下安装 sclapy 先安装 pip install wheel py 库下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 在这 ...
- CoordTools
APPLICATION_VERSION="JTNDYXBwbGljYXRpb24lMjBuYW1lJTIwJTNEJTIwJTIyQ29vcmRUb29sc1BybyUyMiUyMHZlcn ...
- android:定制 ListView 的界面
只能显示一段文本的 ListView 实在是太单调了,我们现在就来对 ListView 的界面进行 定制,让它可以显示更加丰富的内容. 首先需要准备好一组图片,分别对应上面提供的每一种水果,待会我们要 ...
- selenium+python自动化78-autoit参数化与批量上传
前言 前一篇autoit实现文件上传打包成.exe可执行文件后,每次只能传固定的那个图片,我们实际测试时候希望传不同的图片. 这样每次调用的时候,在命令行里面加一个文件路径的参数就行. 一.命令行参数 ...
- linux C++ 获取服务器外网IP地址(使用系统调用system)
废话不多说,直接贴代码: #include<string.h> #include<stdlib.h> #include<stdio.h> #include<s ...
- 第十五章 dubbo结果缓存机制
dubbo提供了三种结果缓存机制: lru:基于最近最少使用原则删除多余缓存,保持最热的数据被缓存 threadlocal:当前线程缓存 jcache:可以桥接各种缓存实现 一.使用方式 <du ...
- 关于three.js中添加文字的方式[转]
https://blog.csdn.net/qq563969790/article/details/76584976 网上资料大部分是通过引入外部font库进行文字效果的载入,但是在实际运行的时候发现 ...