前提:使用unity读取excel时,使用如图的dll:
去读取的时候,在编辑器内运行正常,但是在导出时会发现exe在运行时不能正常读取excel。
用这个dll可以读取2007以后的格式.xlsx,也可以读取97-2003的.xls。
笔者最开始使用的是2007版本,导出exe不能读取数据。
解决方法:读取97-2003的文件就可以。但是读取97-2003文档的方法有点不同,
//1. Reading from a binary Excel file ('97-2003 format; *.xls)
IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
//2. Reading from a OpenXml Excel file (2007 format; *.xlsx)
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
读取到的excelReader有三种方法:选取一种可以使用的(自己多试试哈)
//3. DataSet - The result of each spreadsheet will be created in the
result.TablesDataSet result = excelReader.AsDataSet();
//4. DataSet - Create column names from first row
excelReader.IsFirstRowAsColumnNames =true;
DataSet result = excelReader.AsDataSet();
//5. Data Reader methods
while(excelReader.Read())
{
//excelReader.GetInt32(0);
}
最后上代码:
public static void GameReadExcel(string ExcelPath)
{
FileStream stream = File.Open(Application.dataPath + ExcelPath, FileMode.Open, FileAccess.Read);
//读取2007以后版本
// IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
//读取2003以后版本
IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader (stream);
result = excelReader.AsDataSet();
columns = result.Tables[0].Columns.Count;//获取列数
rows = result.Tables[0].Rows.Count;//获取行数
Debug.Log(columns);
Debug.Log(rows);
////从第二行开始读
//for (int i = 1; i < rows; i++)
//{
// for (int j = 0; j < columns; j++)
// {
// string nvalue = result.Tables[0].Rows[i][j].ToString();
// Debug.Log(nvalue);
// }
//}
}
本文如有版权问题请联系作者。
源码地址:https://github.com/ExcelDataReader/ExcelDataReader