给Unity添加自己的工具(主要是为了实现Excel表转txt文件)
作者:互联网
今天学了给unity添加自己想要的工具
功能嘛——把Excel转换成txt,在游戏开发中策划给了Excel,你又不想自己复制,怎么办?
!那就自己写一个功能,把Excel转换成txt呗~
(上面是效果图,unity2019.3.14版本的)
————————————————————————华丽的分割线————————————————————————————————
下面写一下实现方法吧:
想法很简单:得到Excel——读取Excel——创建Txt文本——把Excel存储为Txt文本
1.新建项目,在Assets文件夹下面创建一个Editor的文件夹,主要用来放自己写的方法的脚本(脚本名随便啦);
2.打开Vs(我用的是vs2019),你就会看到MyEditor脚本在另一个解决方案里面;
3.引入命名空间:
4.把这个类设置成静态类,并取消继承MonoBehaviour;
5.开始写脚本,写个静态方法(记得在前面加上 [MenuItem("我的工具/Excel转txt")] 引号内的内容自己定义,但必须要有两级)
这样才能在unity界面上显示出来
6.定义两个路径,一个是输入的(为了得到Excel所在的位置),一个是输出的(为了放创建出来的txt文本)
7.在实现读取Excel之前先判断路径是否存在,不存在就跳出去,存在就继续执行下面的逻辑;
8.通过Directory.GetFiles去读取Excel,它返回一个string类型的数组;
9.遍历数组,再通过文件流去读取
10.在另一个方法实现创建txt文本以及文本的写入
。。。。。。
下面附上完整代码:
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 using UnityEditor;//引用unity编辑器的命名空间 5 using System.IO; 6 using Excel; 7 using System.Data; 8 9 public static class MyEditor 10 { 11 private static string InPath = Application.dataPath + "/_Excel";//输入路径 12 13 private static string OutPath = Application.dataPath + "/Resources/Data/";//输出路径 14 15 [MenuItem("我的工具/Excel转txt")] 16 public static void ExportExcelToTxt() 17 { 18 if (Directory.Exists(InPath) == false)//判断这个路径是不是存在 19 { 20 Debug.Log("路径不存在"); 21 return; 22 } 23 24 string[] filesArr = Directory.GetFiles(InPath, "*.xlsx"); 25 26 for (int i = 0; i < filesArr.Length; i++) 27 { 28 string filePath = filesArr[i].Replace("\\", "/");//把路径里面的"\"替换为"/"; 29 //Debug.Log(filePath); 30 31 //用文件流读取 32 using (FileStream fs = new FileStream(filePath, FileMode.Open)) 33 { 34 //这个方法是插件提供的 把文件流转换成Excel对象 35 IExcelDataReader dataReader = ExcelReaderFactory.CreateOpenXmlReader(fs); 36 37 DataSet dataSet = dataReader.AsDataSet();//DataSet是每个excel里面的工作簿 38 39 DataTable dataTable = dataSet.Tables[0];//第一个工作簿 40 41 //dataTable.Rows.Count; 行的个数 42 //dataTable.Columns.Count; 列的个数 43 44 TableToTxt(dataTable, filePath); 45 } 46 } 47 48 //刷新编辑器 49 AssetDatabase.Refresh(); 50 51 } 52 53 /// <summary> 54 /// 把Table转换成txt 55 /// </summary> 56 /// <param name="dataTable"></param> 57 /// <param name="filePath"></param> 58 private static void TableToTxt(DataTable dataTable, string filePath) 59 { 60 //获取txt文件的文件名,要跟Excel的一样 61 string fileName = Path.GetFileNameWithoutExtension(filePath);//不带后缀的文件名 62 63 //创建txt文件 64 using (FileStream fs = new FileStream(OutPath + fileName + ".txt", FileMode.Create)) 65 { 66 //写入文件 67 using (StreamWriter sw =new StreamWriter(fs)) 68 { 69 for (int row = 0; row < dataTable.Rows.Count; row++) 70 { 71 for (int col = 0; col < dataTable.Columns.Count; col++) 72 { 73 string val = dataTable.Rows[row][col].ToString(); 74 sw.Write(val + "\t"); 75 } 76 if (row != dataTable.Rows.Count - 1) 77 { 78 sw.WriteLine(); 79 } 80 } 81 } 82 } 83 } 84 }
标签:string,filePath,Excel,Unity,表转,using,txt,dataTable 来源: https://www.cnblogs.com/potato-is-me/p/14233356.html