【Unity】读取Excel工具

【Unity】读取Excel工具,第1张

是什么?

主要功能

1.就是上面说的,转化为ScriptObject数据类,这里分为两种:

a.分离一个Excel表中的所有sheet为单独的一个数据体。

b.把一个Excel表中所有的sheet合成在一个数据体中。

注意:第二种exce中必须每一个sheet的数据项是一样并且位置也是相同的

2.可以选择每一个sheet或者sheet中的数据单项是否被生成到数据体中。

3.系统会自动识别每一个数据单项的数据类型与数据参数名,当然也可以用户更改。

4.在创建数据体完成后,再改表中的数据,数据体自动更新。当然如果是增加删除单项数据,就需要重新生成数据体。

使用方法

1.在Project视窗下选中需要生成数据类的Excel表,右键菜单,选择“Read Excel”。

5.然后在游戏载入时调用一下下面这一句话。

6.实际运用时数据分为两类:

a.分离单数一个sheet的数据体访问。

testObj_Sheet1是你的数据类,然后使用GetData方法传入id即可返回数据体实例。

b.合并sheet的数据体访问方式。

testObj是你的数据类,然后使用GetSheet方法获得sheet,这里自动帮用户生成了sheet的枚举,用户可以直接使用枚举来获得sheet,然后的方法和上一种一样。

原理

unity使用.net的api是2.0的,所以没有可以直接读取Excel哪部分源码。就选择使用了NPOI这样一个开源框架。这里有几个学习NPOI的传送门, 官网 、 官网繁体文档 、 官网英文文档 、 CSDN博客推荐看这个 ,具体的就不详细讲解了。

读取到数据后再使用try测试数据类型,自动填充数据类型。这里就是为什么浮点型需要用户自己设置的原因。

使用的ScriptObject这个Unity给出可以用来存数据的资源。这个其实也可以更改成Json文件,这样服务器跟客户端都可以用了。不过ScriptObject可以很直观的看到数据的储存。

这里用到一个资源变化的回调OnPostprocessAllAssets,这个是需要继承于AssetPostprocessor这类的, 详细可以看这里 。

这里因为字典不能序列化所以需要在游戏加载时,初始化数据一次。

原理就说这么多吧,再具体的大家可以看看源码。

Unity可以读取Excel表格数据文件.xls或.xlsx。方法有:

1. 利用已有的 Unity Excel 插件,这个你到 Asset Store 上搜索 Excel 就能找到。或者在 这里下载

2. 利用第三方的 *** 作 Excel 的 .NET 库,把 DLL 导入进 Unity 工程并调用它的功能。比如 ExcelDataReader、EPPlus

参考,通用读取方法:

需要添加如下引用:

System.Configuration

System.Data

System.EnterpriseServices

System.Security

System.XML

using UnityEngine

using System.Collections

using System

using

System.Data

using System.Data.Odbc

public class EXCELREADER :

MonoBehaviour {

DataTable dtYourData = new DataTable("YourData")

string str = ""

// Use this for initialization

void Start ()

{

readXLS(Application.dataPath + "/Book1.xls")

str = ""+dtYourData.Rows[2][dtYourData.Columns[2].ColumnName].ToString()

}

// Update is called once per frame

void Update ()

{

}

void OnGUI(){

GUILayout.Label(str)

}

void readXLS( string filetoread)

{

// Must be saved

as excel 2003 workbook, not 2007, mono issue really

string con =

"Driver={Microsoft Excel Driver (*.xls)}DriverId=790

Dbq="+filetoread+""

Debug.Log(con)

string yourQuery =

"SELECT * FROM [Sheet1$]"

// our odbc connector

OdbcConnection oCon = new OdbcConnection(con)

// our command

object

OdbcCommand oCmd = new OdbcCommand(yourQuery, oCon)

// table to hold the data

// open the connection

oCon.Open()

// lets use a datareader to fill that

table!

OdbcDataReader rData = oCmd.ExecuteReader()

//

now lets blast that into the table by sheer man power!

dtYourData.Load(rData)

// close that reader!

rData.Close()

// close your connection to the spreadsheet!

oCon.Close()

// wow look at us go now! we are on a roll!!!!!

// lets now see if our table has the spreadsheet data in it, shall

we?

if(dtYourData.Rows.Count >0)

{

// do something with the data here

// but how do I do this

you ask??? good question!

for (int i = 0i <

dtYourData.Rows.Counti++)

{

// for

giggles, lets see the column name then the data for that column!

Debug.Log(dtYourData.Columns[0].ColumnName + " : " +

dtYourData.Rows[i][dtYourData.Columns[0].ColumnName].ToString())

}

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10040448.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存