重庆做网站嘉兴公司,付费推广有几种方式,wordpress 发布文章功能修改,网站移动端怎么做的本文仅作笔记学习和分享#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册#xff0c;unity唐老狮等教程知识#xff0c;如有不足还请斧正 Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(1)-CSDN博客
本节内容 实现目标
通过已经得到的Excel表格… 本文仅作笔记学习和分享不用做任何商业用途 本文包括但不限于unity官方手册unity唐老狮等教程知识如有不足还请斧正 Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(1)-CSDN博客
本节内容 实现目标
通过已经得到的Excel表格数据生成对应类对象不赋值一张表就是一个对象其中包含了如下的字段 就像这样子 实现思路
上节已经获取了一个个单元格那直接利用其中的字段进行字符串拼接
然后把这个字符串通过文件处理存到一个脚本文件之中就行了自然就识别成了类对象了
实现过程
生成数据结构类的脚本的路径 //数据结构类脚本存储private static string Data_Class_Path Application.dataPath /Scripts/ExcelData/DataClass/;
获得表中的字段名和字段类型 //生成数据结构类的方法private static void GenerateExcelDataClass(DataTable dataTable){GetVariableNameRow(dataTable);GetVariableDataTypeRow(dataTable);}//获取表中行字段名字的方法private static DataRow GetVariableNameRow(DataTable dataTable){ return dataTable.Rows[0]; //索引可修改}//获取表中行字段数据类型的方法private static DataRow GetVariableDataTypeRow(DataTable dataTable){return dataTable.Rows[1];//索引可修改} 确认或创建存储数据结构脚本的路径 DataRow dataRowName GetVariableNameRow(dataTable);DataRow dataRowType GetVariableDataTypeRow(dataTable);//判断存储该脚本的路径是否为空if(!Directory.Exists(Data_Class_Path))Directory.CreateDirectory(Data_Class_Path);
狠狠拼接字符串 for (int i 0; i dataTable.Columns.Count; i){str public dataRowType[0].ToString() dataRowName[i].ToString() ; \n;}str };
存入先前的路径中生成脚本
Windows.File-WriteAllBytes - Unity 脚本 API ///dataTable.TableName.ToString() 类名.cs后缀名str内容File.WriteAllText(Data_Class_PathdataTable.TableName.ToString().cs, str);
最终结果
using Excel;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.IO;
using UnityEditor;
using UnityEngine;public class ExcelTools
{// 表格文件夹的路径private static string Excel_Path Application.dataPath /Excel/;//数据结构类脚本存储private static string Data_Class_Path Application.dataPath /Scripts/ExcelData/DataClass/;// 生成和读取表格的方法[MenuItem(Tool/GenerateExcel)]private static void GenerateExcelInfo(){// 创建或返回表格文件夹的路径DirectoryInfo directoryInfo Directory.CreateDirectory(Excel_Path);// 获取文件夹中的所有文件FileInfo[] fileInfo directoryInfo.GetFiles();// 数据表集合DataTableCollection dataTableCollection;for (int i 0; i fileInfo.Length; i){// 筛选出扩展名为 .xlsx 或 .xls 的文件if (fileInfo[i].Extension ! .xlsx fileInfo[i].Extension ! .xls)continue;// 打开文件流读取表格using (FileStream fs fileInfo[i].Open(FileMode.Open, FileAccess.Read)){// 使用 IExcelDataReader 读取表格数据IExcelDataReader excelDataReader ExcelReaderFactory.CreateOpenXmlReader(fs);dataTableCollection excelDataReader.AsDataSet().Tables; // 转换为数据表集合fs.Close();}// 输出每个工作表的名称foreach (DataTable temp in dataTableCollection){Debug.Log(temp.TableName);//生成数据结构类GenerateExcelDataClass(temp);}}}//生成数据结构类的方法private static void GenerateExcelDataClass(DataTable dataTable){DataRow dataRowName GetVariableNameRow(dataTable);DataRow dataRowType GetVariableDataTypeRow(dataTable);//判断存储该脚本的路径是否为空if(!Directory.Exists(Data_Class_Path))Directory.CreateDirectory(Data_Class_Path);string str public class dataTable.TableName.ToString()\n{\n;for (int i 0; i dataTable.Columns.Count; i){str public dataRowType[0].ToString() dataRowName[i].ToString() ; \n;}str };///dataTable.TableName.ToString() 类名.cs后缀名str内容File.WriteAllText(Data_Class_PathdataTable.TableName.ToString().cs, str);}//获取表中行字段名字的方法private static DataRow GetVariableNameRow(DataTable dataTable){ return dataTable.Rows[0]; //索引可修改}//获取表中行字段数据类型的方法private static DataRow GetVariableDataTypeRow(DataTable dataTable){return dataTable.Rows[1];//索引可修改}
}