public static void AnalyzeExcel(string excelPath, Action <List <KeyValuePair <string, object> > > callback) { try { FileStream fs = new FileStream(excelPath, FileMode.Open, FileAccess.Read); using (IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(fs)) { DataSet dataset = excelReader.AsDataSet(); DataTable dt = dataset.Tables[0]; { Dictionary <int, string> colToTitleDic = new Dictionary <int, string>(); for (int row = 0; row < dt.Rows.Count; row++) { DataRow dr = dt.Rows[row]; if (row == 1) { for (int col = 0; col < dt.Columns.Count; col++) { DataColumn dc = dt.Columns[col]; object value = dr[dc]; colToTitleDic.Add(col, value.ToString()); } } else if (row >= 3) { DropItemsDataAsset.DropItem dropItem = new DropItemsDataAsset.DropItem(); List <KeyValuePair <string, object> > pairs = new List <KeyValuePair <string, object> >(); foreach (var iterator in colToTitleDic) { object value = GetDataTableData(dt, row, iterator.Key); pairs.Add(new KeyValuePair <string, object>(iterator.Value, value)); } callback(pairs); } } } } } catch (Exception e) { EditorUtility.DisplayDialog("出错(一般是excel没有关闭)", e.ToString(), "确认"); } }
private void OnGUI() { dropItemsDataAsset = (DropItemsDataAsset)EditorGUILayout.ObjectField("dropItemsDataAsset", dropItemsDataAsset, typeof(DropItemsDataAsset)); excelPath = MyGUI.TextFieldWithTitle("表格路径", excelPath); // text = GUILayout.TextArea(text, new GUIStyle(){}); if (MyGUI.Button("载入表格")) { dropItemsDataAsset.DropItemList.Clear(); EditorTools.AnalyzeExcel(excelPath, (List <KeyValuePair <string, object> > pairs) => { DropItemsDataAsset.DropItem dropItem = new DropItemsDataAsset.DropItem(); foreach (var pair in pairs) { switch (pair.Key) { case "id": dropItem.Id = Convert.ToString(pair.Value); break; case "MonsterID": dropItem.RoleId = Convert.ToString(pair.Value); break; case "Name": dropItem.RoleName = Convert.ToString(pair.Value); break; case "Lv": string[] lvs = Convert.ToString(pair.Value).Split(';'); dropItem.LvFrom = Convert.ToInt32(lvs[0]); dropItem.LvTo = Convert.ToInt32(lvs[1]); break; case "DropOne": dropItem.DropOne = Convert.ToInt32(pair.Value); break; case "DropTwo": dropItem.DropTwo = Convert.ToInt32(pair.Value); break; case "DropThree": dropItem.DropThree = Convert.ToInt32(pair.Value); break; case "DropSoul": dropItem.DropSoul = Convert.ToInt32(pair.Value); break; } } dropItemsDataAsset.DropItemList.Add(dropItem); }); EditorUtility.SetDirty(dropItemsDataAsset); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } if (MyGUI.Button("测试")) { text = ""; int instanceLevelMin = 1; int instanceLevelMax = 99; var roleIds = DropItemsDataAsset.Instance.GetAllRoleId(); foreach (var roleId in roleIds) { for (int instanceLevel = instanceLevelMin; instanceLevel <= instanceLevelMax; instanceLevel++) { List <string> dropItemIdList = DropItemsDataAsset.Instance.GetDropItemIdList(instanceLevel, roleId); int soulCount = DropItemsDataAsset.Instance.GetDropSoulCount(instanceLevel, roleId); text += "id: " + roleId + ", " + "instanceLevel: " + instanceLevel + ", dropItems: "; EditorUtility.DisplayProgressBar("测试", "id: " + roleId + ", " + "instanceLevel: " + instanceLevel + ", dropItems: ", (float)instanceLevel / instanceLevelMax); if (dropItemIdList != null) { for (int i = 0; i < dropItemIdList.Count; i++) { var dropItemId = dropItemIdList[i]; if (i == dropItemIdList.Count - 1) { text += dropItemId; text += "\n"; } else { text += dropItemId; text += ", "; } } } // 掉落魂数目 add by TangJian 2019/3/13 12:55 if (soulCount > 0) { text += ", Soulx" + soulCount; } text += "\n"; } } EditorUtility.ClearProgressBar(); } if (MyGUI.Button("测试1")) { // List<string> itemList = ItemManager.Instance.GetItemIdListDescendingOrder(0, 1, 0); // foreach (var itemId in itemList) // { // text += itemId; // text += "\n"; // } List <string> itemList = DropItemsDataAsset.Instance.GetDropItemIdList(9, "Human"); foreach (var itemId in itemList) { text += itemId; text += "\n"; } } textScrollViewPos = GUILayout.BeginScrollView(textScrollViewPos); text = EditorGUILayout.TextArea(text); GUILayout.EndScrollView(); }
private void OnGUI() { roleUpgradeDataAsset = (RoleUpgradeDataAsset)EditorGUILayout.ObjectField("roleUpgradeDataAsset", roleUpgradeDataAsset, typeof(DropItemsDataAsset)); excelPath = MyGUI.TextFieldWithTitle("表格路径", excelPath); // text = GUILayout.TextArea(text, new GUIStyle(){}); if (MyGUI.Button("载入表格")) { roleUpgradeDataAsset.Clear(); EditorTools.AnalyzeExcel(excelPath, (List <KeyValuePair <string, object> > pairs) => { DropItemsDataAsset.DropItem dropItem = new DropItemsDataAsset.DropItem(); int lv = -1; int exp = -1; foreach (var pair in pairs) { switch (pair.Key) { case "lv": lv = Convert.ToInt32(pair.Value); break; case "exp": exp = Convert.ToInt32(pair.Value); break; } } Debug.Assert(lv >= 1 && exp >= 0); roleUpgradeDataAsset.AddItem(lv, exp); }); EditorUtility.SetDirty(roleUpgradeDataAsset); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } if (MyGUI.Button("测试")) { outputText = ""; outputText += "通过经验获取等级:\n"; for (int exp = 0; exp <= RoleUpgradeDataAsset.Instance.GetLevelMaxExp() * 2; exp++) { int level = RoleUpgradeDataAsset.Instance.GetLevel(exp); outputText += "exp: " + exp + " -> level: " + level + "\n"; } for (int i = 0; i < 10; i++) { outputText += "\n"; } outputText += "通过等级获取经验:\n"; for (int level = 1; level <= RoleUpgradeDataAsset.Instance.GetLevelMax(); level++) { int exp = RoleUpgradeDataAsset.Instance.GetExp(level); outputText += "level: " + level + " -> exp: " + exp + "\n"; } } outputTextScrollViewPos = EditorGUILayout.BeginScrollView(outputTextScrollViewPos, GUILayout.ExpandWidth(true)); outputText = EditorGUILayout.TextArea(outputText); EditorGUILayout.EndScrollView(); }