Unity 关于Excel文件的读取和修改
Unity 可以对Excel表进行读取和修改操作。
可以指定Excel的Sheet。将数据通过行列的对应关系进行读取或修改。
读取:
方法一:
/// <summary> /// 读取Excel表 /// </summary> /// <param name="excelpath">表路径</param> /// <param name="sheetname">sheet名称</param> public static List<string[]> ReadExcelFuncOne(string excelpath,string sheetname) { FileStream fileStream = File.Open(excelpath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); IExcelDataReader excelDataReader = ExcelReaderFactory.CreateOpenXmlReader(fileStream); DataSet dataset = excelDataReader.AsDataSet(); List<string[]> result = new List<string[]>(); DataRowCollection dataRow = dataset.Tables[sheetname].Rows; for (int i = 0; i < dataRow.Count; i++) { DataRow datarow = dataRow[i]; string[] temp = new string[datarow.ItemArray.Length]; for (int j = 0; j < datarow.ItemArray.Length; j++) { temp[j] = datarow.ItemArray[j].ToString(); } result.Add(temp); } return result; }
注意File.Open函数里面的【FileShare.ReadWrite】参数,如果没有的话当Excel表处于打开状态下,读取会报错。
方法二:
/// <summary> /// 读取Excel表 /// </summary> /// <param name="excelpath">表路径</param> /// <param name="sheetname">sheet名称</param> public static List<string[]> ReadExcelFuncTwo(string excelpath, string sheetname) { FileStream fileStream = File.Open(excelpath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); ExcelPackage pck = new ExcelPackage(new MemoryStream(), fileStream); ExcelWorkbook ewb = pck.Workbook; ExcelWorksheet ew = ewb.Worksheets[sheetname]; int columns = ew.Dimension.End.Column;//获取列数 int rows = ew.Dimension.End.Row;//获取行数 List<string[]> result = new List<string[]>(); //第一行为表头,不读取 for (int i = 1; i <=rows; i++) { string[] rowData = new string[columns]; for (int j = 1; j <=columns; j++) { // 获取表格中指定行指定列的数据 rowData[j - 1] = ew.Cells[i, j].Value.ToString(); } result.Add(rowData); } return result; }
注意数据的起始下标不是从[0,0]开始 ,而是从[1,1]开始的。
写入:
/// <summary> /// 写Excel表 /// </summary> /// <param name="excelpath"></param> /// <param name="sheetname"></param> /// <param name="data"></param> public static void WriteExcel(string excelpath, string sheetname,List<string[]> data) { if (data == null || data.Count == 0) return; FileInfo fileInfo = new FileInfo(excelpath); using (ExcelPackage package = new ExcelPackage(fileInfo)) { package.Workbook.Worksheets.Delete(sheetname); ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(sheetname); for (int i = 0; i < data.Count; i++) { for (int k = 0; k < data[i].Length; k++) { worksheet.Cells[i+1, k + 1].Value = data[i][k]; } } package.Save(); } }
我测试中发现当表在打开状态下会写入失败。后面如果发现有办法在打开状态下写入的话再更新。
测试过程:
本地Excel表

读表测试

读表正常
写入测试也正常
引用的dll

下面会附上工程 .unitypackage包的网盘地址,包含引用的dll。有需要的小伙伴可以下载。
如果需要发布出来的话还需要引用一些dll。这些dll可以在unity的安装路径下找到。

测试工程网盘地址 我使用的是unity版本是2019.2
链接:https://pan.baidu.com/s/1cZaoYhEVCDR5KNdHUSUqrA
提取码:wpsi
浙公网安备 33010602011771号