给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.引入命名空间:

 

 (引用Excel要导入Excel的插件)

 

 

 

 

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 }

 

 

 

 

 

posted @ 2021-01-05 01:52  邪心鳞宝  阅读(623)  评论(0编辑  收藏  举报