123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- using UnityEngine;
- using UnityEditor;
- using System.IO;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- public class BuildExcelWindow : EditorWindow
- {
- // 定义一个静态变量来持有选中的ScriptableObject引用
- public static TaskConfig selectedObject;
- [MenuItem("MyTools/addexcel")]
- public static void ExportScriptableObjectToExcel()
- {
- string path = EditorUtility.OpenFilePanel("Select File", "", "");
- if (!string.IsNullOrEmpty(path))
- {
- string pp = path.Split('/')[path.Split('/').Length - 2] +"/"+ path.Split('/')[path.Split('/').Length - 1];
- Debug.Log("Selected file: " + pp);
- var obj = AssetDatabase.LoadAssetAtPath<TaskConfig>(pp);
- if (obj != null)
- {
- Selection.activeObject = obj;
- Debug.Log("Selected MyScriptableObject: " + obj.name);
- StringBuilder csv = new StringBuilder();
- // 添加标题行
- // csv.AppendLine("Name,Number");
- for (int i = 0; i < obj.TaskList.Count; i++)
- {
- string xs = "";
- if (obj.TaskList[i].xiansuos != null && obj.TaskList[i].xiansuos.Length > 0)
- {
- for (int j = 0; j < obj.TaskList[i].xiansuos.Length; j++)
- {
- if (j >= obj.TaskList[i].xiansuos.Length - 1)
- {
- xs += obj.TaskList[i].xiansuos[j];
- }
- else
- {
- xs += obj.TaskList[i].xiansuos[j] + "|";
- }
- }
- }
- string dj = "";
- if (obj.TaskList[i].daojus != null && obj.TaskList[i].daojus.Length > 0)
- {
- for (int j = 0; j < obj.TaskList[i].daojus.Length; j++)
- {
- if (j >= obj.TaskList[i].daojus.Length - 1)
- {
- dj += obj.TaskList[i].daojus[j];
- }
- else
- {
- dj += obj.TaskList[i].daojus[j] + "|";
- }
- }
- }
- // 添加数据行
- csv.AppendLine($"{i + 1},{obj.TaskList[i].info},{obj.TaskList[i].info2}" +
- $",{xs}" +
- $",{obj.TaskList[i].type}" +
- $",{obj.TaskList[i].isNoshow}" +
- $",{obj.TaskList[i].bgName}" +
- $",{obj.TaskList[i].imgName}" +
- $",{obj.TaskList[i].taskcheck}" +
- $",{obj.TaskList[i].centerName}" +
- $",{obj.TaskList[i].lihui}" +
- $",{obj.TaskList[i].texiao}" +
- $",{obj.TaskList[i].guochang}" +
- $",{obj.TaskList[i].isguochangskip}" +
- $",{obj.TaskList[i].lihuisize}" +
- $",{obj.TaskList[i].centersize}" +
- $",{obj.TaskList[i].perbName}" +
- $",{obj.TaskList[i].isClose}" +
- $",{obj.TaskList[i].isTuo}" +
- $",{dj}" +
- $",{obj.TaskList[i].isClosebtShow}" +
- $",{obj.TaskList[i].isTextNext}" +
- $",{obj.TaskList[i].isARSao}" +
- $",{obj.TaskList[i].arid}");
- }
- string nameWithoutExtension = GetFileNameWithoutExtension(path);
- Debug.Log(nameWithoutExtension);
- // 写入文件
- File.WriteAllText(Application.streamingAssetsPath + "/" + nameWithoutExtension + ".csv", csv.ToString());
- }
- }
- }
- public static string GetFileNameWithoutExtension(string filePath)
- {
- return Path.GetFileNameWithoutExtension(filePath);
- }
- [MenuItem("MyTools/Excel Window",priority = 100)]
- public static void ShowReadExcelWindow()
- {
- BuildExcelWindow window = GetWindow<BuildExcelWindow>(true);
- window.Show();
- window.minSize = new Vector2(475,475);
- }
- //Excel读取路径,绝对路径,放在Assets同级路径
- private static string excelReadAbsolutePath;
- //自动生成C#类文件路径,绝对路径
- private static string scriptSaveAbsolutePath;
- private static string scriptSaveRelativePath;
- //自动生成Asset文件路径,相对路径
- private static string assetSaveRelativePath;
- private List<string> fileNameList = new List<string>();
- private List<string> filePathList = new List<string>();
- private void Awake()
- {
- titleContent.text = "Excel配置表读取";
- excelReadAbsolutePath = Application.dataPath.Replace("Assets","Excel");
- scriptSaveAbsolutePath = Application.dataPath + CheckEditorPath("/Script/Excel/AutoCreateCSCode");
- scriptSaveRelativePath = CheckEditorPath("Assets/Script/Excel/AutoCreateCSCode");
- assetSaveRelativePath = CheckEditorPath("Assets/AssetData/Excel/AutoCreateAsset");
- }
- private void OnEnable()
- {
- RefreshExcelFile();
- }
- private void OnDisable()
- {
- fileNameList.Clear();
- filePathList.Clear();
- }
- private Vector2 scrollPosition = Vector2.zero;
- private void OnGUI()
- {
- GUILayout.Space(10);
- scrollPosition = GUILayout.BeginScrollView(scrollPosition,GUILayout.Width(position.width),GUILayout.Height(position.height));
- //展示路径
- GUILayout.BeginHorizontal(GUILayout.Height(20));
- if(GUILayout.Button("Excel读取路径",GUILayout.Width(100)))
- {
- EditorUtility.OpenWithDefaultApp(excelReadAbsolutePath);
- Debug.Log(excelReadAbsolutePath);
- }
- if(GUILayout.Button("Script保存路径",GUILayout.Width(100)))
- {
- SelectObject(scriptSaveRelativePath);
- }
- if(GUILayout.Button("Asset保存路径",GUILayout.Width(100)))
- {
- SelectObject(assetSaveRelativePath);
- }
- GUILayout.EndHorizontal();
- GUILayout.Space(5);
- //Excel列表
- GUILayout.Label("Excel列表:");
- for(int i = 0; i < fileNameList.Count; i++)
- {
- GUILayout.BeginHorizontal("Box",GUILayout.Height(40));
- GUILayout.Label($"{i}:","Titlebar Foldout",GUILayout.Width(30),GUILayout.Height(35));
- GUILayout.Box(fileNameList[i],"MeTransitionBlock",GUILayout.MinWidth(200),GUILayout.Height(35));
- GUILayout.Space(10);
- //生成CS代码
- if(GUILayout.Button("Create Script",GUILayout.Width(100),GUILayout.Height(30)))
- {
- ExcelDataReader.ReadOneExcelToCode(filePathList[i],scriptSaveAbsolutePath);
- }
- //生成Asset文件
- if(GUILayout.Button("Create Asset",GUILayout.Width(100),GUILayout.Height(30)))
- {
- ExcelDataReader.CreateOneExcelAsset(filePathList[i],assetSaveRelativePath);
- }
- GUILayout.EndHorizontal();
- GUILayout.Space(5);
- }
- GUILayout.Space(10);
- //一键处理所有Excel
- GUILayout.Label("一键操作:");
- GUILayout.BeginHorizontal("Box",GUILayout.Height(40));
- GUILayout.Label("all","Titlebar Foldout",GUILayout.Width(30),GUILayout.Height(35));
- GUILayout.Box("All Excel","MeTransitionBlock",GUILayout.MinWidth(200),GUILayout.Height(35));
- GUILayout.Space(10);
- if(GUILayout.Button("Create Script",GUILayout.Width(100),GUILayout.Height(30)))
- {
- ExcelDataReader.ReadAllExcelToCode(excelReadAbsolutePath,scriptSaveAbsolutePath);
- }
- if(GUILayout.Button("Create Asset",GUILayout.Width(100),GUILayout.Height(30)))
- {
- ExcelDataReader.CreateAllExcelAsset(excelReadAbsolutePath,assetSaveRelativePath);
- }
- GUILayout.EndHorizontal();
- //
- GUILayout.Space(20);
- //
- GUILayout.EndScrollView();
- }
- //读取指定路径下的Excel文件名
- private void RefreshExcelFile()
- {
- fileNameList.Clear();
- filePathList.Clear();
- if(!Directory.Exists(excelReadAbsolutePath))
- {
- Debug.LogError("无效路径:" + excelReadAbsolutePath);
- return;
- }
- string[] excelFileFullPaths = Directory.GetFiles(excelReadAbsolutePath,"*.xlsx");
- if(excelFileFullPaths == null || excelFileFullPaths.Length == 0)
- {
- Debug.LogError(excelReadAbsolutePath + "路径下没有找到Excel文件");
- return;
- }
- filePathList.AddRange(excelFileFullPaths);
- for(int i = 0; i < filePathList.Count; i++)
- {
- fileNameList.Add(Path.GetFileName(filePathList[i]));
- }
- Debug.Log("找到Excel文件:" + fileNameList.Count + "个");
- }
- private void SelectObject(string targetPath)
- {
- Object targetObj = AssetDatabase.LoadAssetAtPath<Object>(targetPath);
- EditorGUIUtility.PingObject(targetObj);
- Selection.activeObject = targetObj;
- Debug.Log(targetPath);
- }
- private static string CheckEditorPath(string path)
- {
- #if UNITY_EDITOR_WIN
- return path.Replace("/","\\");
- #elif UNITY_EDITOR_OSX
- return path.Replace("\\","/");
- #else
- return path;
- #endif
- }
- }
|