好久没更新博客了,转型做项目经理已经大半年了,杂事比较多。平时研究的东西都没精力整理后写出来,主要还是太懒。
1. 废话不多说,今天整理了一下Unity读Excel表的方法,以及打包时需要注意的事项。要读取Excel表格,首先得导入“Excel.dll”。这个类库网上一搜一大把,我就不上传了。下面上代码
using Excel;
using System.Data;
using System.IO;
namespace HMLFramwork.EXCEL
{
public class ExcelReader
{
private string _excelPath = string.Empty;
private int _rowCount = 0;
/// <summary>
/// 总行数(默认为第一张表的数据)
/// </summary>
public int rowCount { get { return _rowCount; } }
private int _coluCount = 0;
/// <summary>
/// 总列数(默认为第一张表的数据)
/// </summary>
public int coluCount { get { return _coluCount; } }
private DataRowCollection _rows;
/// <summary>
/// 所有行数据(默认为第一张表的数据)
/// </summary>
public DataRowCollection Rows { get { return _rows; } }
private DataColumnCollection _colus;
/// <summary>
/// 所有列数据(默认为第一张表的数据)
/// </summary>
public DataColumnCollection Colus { get { return _colus; } }
private DataSet _excelData;
/// <summary>
/// Excel数据容器
/// </summary>
public DataSet ExcelData { get { return _excelData; } }
public ExcelReader(string excelPath)
{
_excelPath = excelPath;
FileStream stream = File.Open(_excelPath, FileMode.Open, FileAccess.Read);
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
_excelData = excelReader.AsDataSet();
_rows = _excelData.Tables[0].Rows;
_colus = _excelData.Tables[0].Columns;
_rowCount = _rows.Count;
_coluCount = _colus.Count;
if (stream != null) stream.Close();
}
}
}
2. 读取的时候,直接new出一个对象,传入Excel表的路径。(在此我建议大家将Excel表放在流资源文件夹)示例如下:
public void Start()
{
if (_codeAndMeaningsDic == null)
{
//存数据的字典
_codeAndMeaningsDic = new Dictionary<string, string>();
ExcelReader er = new ExcelReader(_excelPath);
DataSet result = er.ExcelData;
//总行数
int rows = er.rowCount;
//遍历数据
for (int i = 1; i < rows; i++)
{
// 每一行数据
string _key = result.Tables[0].Rows[i][0].ToString();
string _value = result.Tables[0].Rows[i][1].ToString();
_codeAndMeaningsDic.Add(_key, _value);
}
}
}
3.打包后运行,会在下面这一步报空指针异常:
原因是在缺少以下类库,类库在Unity安装路径下:
将框选的以“I18N”开头的类库等复制粘贴到发布的程序包里面的Managed目录下,即可正常读取。如下图所示: