PageRenderTime 46ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/CardHelper/frmExport.cs

https://github.com/PlutoCYF/HearthStone
C# | 296 lines | 244 code | 1 blank | 51 comment | 6 complexity | c221b452e0730d6663bffea4018dc24c MD5 | raw file
  1. using Card;
  2. using Microsoft.VisualBasic;
  3. //using MongoDB.Driver;
  4. using System;
  5. using System.IO;
  6. using System.Windows.Forms;
  7. using System.Xml.Serialization;
  8. namespace CardHelper
  9. {
  10. public partial class frmExport : Form
  11. {
  12. public frmExport()
  13. {
  14. InitializeComponent();
  15. }
  16. //private static MongoServer innerServer;
  17. //private static MongoDatabase innerDatabase;
  18. //private static MongoCollection innerCollection;
  19. /// <summary>
  20. /// 导出到MongoDB
  21. /// </summary>
  22. /// <param name="sender"></param>
  23. /// <param name="e"></param>
  24. private void btnExportMongoDB_Click(object sender, EventArgs e)
  25. {
  26. //innerServer = MongoServer.Create(@"mongodb://localhost:28030");
  27. //innerServer.Connect();
  28. //innerDatabase = innerServer.GetDatabase("HearthStone");
  29. //innerCollection = innerDatabase.GetCollection("Card");
  30. if (String.IsNullOrEmpty(ExcelPicker.SelectedPathOrFileName)) return;
  31. Export(TargetType.MongoDB);
  32. GC.Collect();
  33. //innerServer.Disconnect();
  34. }
  35. /// <summary>
  36. ///
  37. /// </summary>
  38. /// <param name="sender"></param>
  39. /// <param name="e"></param>
  40. private void btnExportXml_Click(object sender, EventArgs e)
  41. {
  42. if (String.IsNullOrEmpty(ExcelPicker.SelectedPathOrFileName)) return;
  43. if (String.IsNullOrEmpty(XmlFolderPicker.SelectedPathOrFileName)) return;
  44. Export(TargetType.Xml);
  45. }
  46. /// <summary>
  47. /// 导出类型
  48. /// </summary>
  49. private enum TargetType
  50. {
  51. /// <summary>
  52. /// MongoDataBase
  53. /// </summary>
  54. MongoDB,
  55. /// <summary>
  56. /// XmlFile
  57. /// </summary>
  58. Xml
  59. }
  60. /// <summary>
  61. /// 导入
  62. /// </summary>
  63. private void Export(TargetType target)
  64. {
  65. dynamic excelObj = Interaction.CreateObject("Excel.Application");
  66. excelObj.Visible = true;
  67. dynamic workbook;
  68. workbook = excelObj.Workbooks.Open(ExcelPicker.SelectedPathOrFileName);
  69. Minion(target, workbook);
  70. Ability(target, workbook);
  71. Weapon(target, workbook);
  72. workbook.Close();
  73. excelObj.Quit();
  74. excelObj = null;
  75. MessageBox.Show("导出结束");
  76. }
  77. /// <summary>
  78. /// 随从的导入
  79. /// </summary>
  80. /// <param name="target"></param>
  81. /// <param name="workbook"></param>
  82. private void Minion(TargetType target, dynamic workbook)
  83. {
  84. if (Directory.Exists(XmlFolderPicker.SelectedPathOrFileName + "\\Minion\\"))
  85. {
  86. Directory.Delete(XmlFolderPicker.SelectedPathOrFileName + "\\Minion\\", true);
  87. }
  88. Directory.CreateDirectory(XmlFolderPicker.SelectedPathOrFileName + "\\Minion\\");
  89. //随从的导入
  90. dynamic worksheet = workbook.Sheets(1);
  91. int rowCount = 4;
  92. while (!String.IsNullOrEmpty(worksheet.Cells(rowCount, 2).Text))
  93. {
  94. Card.MinionCard Minion = new Card.MinionCard();
  95. Minion.SN = worksheet.Cells(rowCount, 2).Text;
  96. Minion.Name = worksheet.Cells(rowCount, 3).Text;
  97. Minion.Description = worksheet.Cells(rowCount, 4).Text;
  98. Minion.Class = CardUtility.GetEnum<Card.CardUtility.ClassEnum>(worksheet.Cells(rowCount, 5).Text, Card.CardUtility.ClassEnum.中立);
  99. Minion.StandardCostPoint = CardUtility.GetInt(worksheet.Cells(rowCount, 7).Text);
  100. Minion.ActualCostPoint = Minion.StandardCostPoint;
  101. Minion.StandardAttackPoint = CardUtility.GetInt(worksheet.Cells(rowCount, 8).Text);
  102. Minion.StandardHealthPoint = CardUtility.GetInt(worksheet.Cells(rowCount, 9).Text);
  103. Minion.Rare = CardUtility.GetEnum<Card.CardBasicInfo.稀有程度>(worksheet.Cells(rowCount, 12).Text, CardBasicInfo.稀有程度.白色);
  104. Minion.IsCardReady = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 13).Text);
  105. Minion.Standard嘲讽 = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 14).Text);
  106. Minion.Standard冲锋 = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 15).Text);
  107. Minion.Standard不能攻击 = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 16).Text);
  108. Minion.Standard风怒 = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 17).Text);
  109. Minion.潜行特性 = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 18).Text);
  110. Minion.圣盾特性 = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 19).Text);
  111. Minion.法术免疫特性 = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 20).Text);
  112. Minion.英雄技能免疫特性 = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 21).Text);
  113. Boolean HasBuff = false;
  114. for (int i = 22; i < 25; i++)
  115. {
  116. if (!String.IsNullOrEmpty(worksheet.Cells(rowCount, i).Text))
  117. {
  118. HasBuff = true;
  119. break;
  120. }
  121. }
  122. if (HasBuff)
  123. {
  124. Minion.光环效果.Scope = CardUtility.GetEnum<Card.MinionCard.光环范围>(worksheet.Cells(rowCount, 22).Text, Card.MinionCard.光环范围.随从全体);
  125. Minion.光环效果.EffectType = CardUtility.GetEnum<Card.MinionCard.光环类型>(worksheet.Cells(rowCount, 23).Text, Card.MinionCard.光环类型.增加攻防);
  126. Minion.光环效果.BuffInfo = worksheet.Cells(rowCount, 24).Text;
  127. }
  128. Minion.战吼效果 = worksheet.Cells(rowCount, 25).Text;
  129. Minion.亡语效果 = worksheet.Cells(rowCount, 26).Text;
  130. Minion.激怒效果 = worksheet.Cells(rowCount, 27).Text;
  131. Minion.连击效果 = worksheet.Cells(rowCount, 28).Text;
  132. Minion.回合开始效果 = worksheet.Cells(rowCount, 29).Text;
  133. Minion.回合结束效果 = worksheet.Cells(rowCount, 30).Text;
  134. switch (target)
  135. {
  136. case TargetType.MongoDB:
  137. //innerCollection.Insert<Card.MinionCard>(Minion);
  138. break;
  139. case TargetType.Xml:
  140. XmlSerializer xml = new XmlSerializer(typeof(Card.MinionCard));
  141. String XmlFilename = XmlFolderPicker.SelectedPathOrFileName + "\\Minion\\" + Minion.SN + ".xml";
  142. xml.Serialize(new StreamWriter(XmlFilename), Minion);
  143. break;
  144. default:
  145. break;
  146. }
  147. rowCount++;
  148. }
  149. }
  150. /// <summary>
  151. /// 法术的导入
  152. /// </summary>
  153. /// <param name="target"></param>
  154. /// <param name="workbook"></param>
  155. private void Ability(TargetType target, dynamic workbook)
  156. {
  157. if (Directory.Exists(XmlFolderPicker.SelectedPathOrFileName + "\\Ability\\"))
  158. {
  159. Directory.Delete(XmlFolderPicker.SelectedPathOrFileName + "\\Ability\\", true);
  160. }
  161. Directory.CreateDirectory(XmlFolderPicker.SelectedPathOrFileName + "\\Ability\\");
  162. //法术的导入
  163. dynamic worksheet = workbook.Sheets(2);
  164. int rowCount = 4;
  165. while (!String.IsNullOrEmpty(worksheet.Cells(rowCount, 2).Text))
  166. {
  167. Card.AbilityCard Ability = new Card.AbilityCard();
  168. Ability.SN = worksheet.Cells(rowCount, 2).Text;
  169. Ability.Name = worksheet.Cells(rowCount, 3).Text;
  170. Ability.Description = worksheet.Cells(rowCount, 4).Text;
  171. Ability.Class = CardUtility.GetEnum<Card.CardUtility.ClassEnum>(worksheet.Cells(rowCount, 5).Text, Card.CardUtility.ClassEnum.中立);
  172. Ability.StandardCostPoint = CardUtility.GetInt(worksheet.Cells(rowCount, 7).Text);
  173. Ability.ActualCostPoint = Ability.StandardCostPoint;
  174. Ability.Rare = CardUtility.GetEnum<Card.CardBasicInfo.稀有程度>(worksheet.Cells(rowCount, 12).Text, CardBasicInfo.稀有程度.白色);
  175. Ability.IsCardReady = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 13).Text);
  176. Card.Effect.EffectDefine effect = new Card.Effect.EffectDefine();
  177. effect.Description = String.IsNullOrEmpty(worksheet.Cells(rowCount, 14).Text) ? String.Empty : worksheet.Cells(rowCount, 14).Text;
  178. effect.AbilityEffectType = CardUtility.GetEnum<Card.Effect.CardEffect.AbilityEffectEnum>(worksheet.Cells(rowCount, 15).Text, Card.Effect.CardEffect.AbilityEffectEnum.未定义);
  179. effect.EffictTargetSelectMode = CardUtility.GetEnum<Card.CardUtility.TargetSelectModeEnum>(worksheet.Cells(rowCount, 16).Text, CardUtility.TargetSelectModeEnum.不用选择);
  180. effect.EffectTargetSelectDirect = CardUtility.GetEnum<Card.CardUtility.TargetSelectDirectEnum>(worksheet.Cells(rowCount, 17).Text, CardUtility.TargetSelectDirectEnum.双方);
  181. effect.EffectTargetSelectRole = CardUtility.GetEnum<Card.CardUtility.TargetSelectRoleEnum>(worksheet.Cells(rowCount, 18).Text, CardUtility.TargetSelectRoleEnum.随从);
  182. effect.StandardEffectPoint = CardUtility.GetInt(worksheet.Cells(rowCount, 19).Text);
  183. effect.EffectCount = CardUtility.GetInt(worksheet.Cells(rowCount, 20).Text);
  184. if (effect.EffectCount == 0) effect.EffectCount = 1;
  185. effect.AddtionInfo = worksheet.Cells(rowCount, 21).Text;
  186. Ability.CardAbility.FirstAbilityDefine = effect;
  187. Ability.CardAbility.JoinType = CardUtility.GetEnum<Card.CardUtility.EffectJoinType>(worksheet.Cells(rowCount, 22).Text, Card.CardUtility.EffectJoinType.None);
  188. Boolean HasSecond = false;
  189. for (int i = 23; i < 31; i++)
  190. {
  191. if (!String.IsNullOrEmpty(worksheet.Cells(rowCount, i).Text))
  192. {
  193. HasSecond = true;
  194. break;
  195. }
  196. }
  197. if (HasSecond)
  198. {
  199. Card.Effect.EffectDefine effect2 = new Card.Effect.EffectDefine();
  200. effect2.Description = String.IsNullOrEmpty(worksheet.Cells(rowCount, 23).Text) ? String.Empty : worksheet.Cells(rowCount, 23).Text;
  201. effect2.AbilityEffectType = CardUtility.GetEnum<Card.Effect.CardEffect.AbilityEffectEnum>(worksheet.Cells(rowCount, 24).Text, Card.Effect.CardEffect.AbilityEffectEnum.未定义);
  202. effect2.EffictTargetSelectMode = CardUtility.GetEnum<Card.CardUtility.TargetSelectModeEnum>(worksheet.Cells(rowCount, 25).Text, CardUtility.TargetSelectModeEnum.不用选择);
  203. effect2.EffectTargetSelectDirect = CardUtility.GetEnum<Card.CardUtility.TargetSelectDirectEnum>(worksheet.Cells(rowCount, 26).Text, CardUtility.TargetSelectDirectEnum.双方);
  204. effect2.EffectTargetSelectRole = CardUtility.GetEnum<Card.CardUtility.TargetSelectRoleEnum>(worksheet.Cells(rowCount, 27).Text, CardUtility.TargetSelectRoleEnum.随从);
  205. effect2.StandardEffectPoint = CardUtility.GetInt(worksheet.Cells(rowCount, 28).Text);
  206. effect2.EffectCount = CardUtility.GetInt(worksheet.Cells(rowCount, 29).Text);
  207. effect2.AddtionInfo = worksheet.Cells(rowCount, 30).Text;
  208. Ability.CardAbility.SecondAbilityDefine = effect2;
  209. }
  210. switch (target)
  211. {
  212. case TargetType.MongoDB:
  213. //innerCollection.Insert<Card.AbilityCard>(Ability);
  214. break;
  215. case TargetType.Xml:
  216. XmlSerializer xml = new XmlSerializer(typeof(Card.AbilityCard));
  217. String XmlFilename = XmlFolderPicker.SelectedPathOrFileName + "\\Ability\\" + Ability.SN + ".xml";
  218. xml.Serialize(new StreamWriter(XmlFilename), Ability);
  219. break;
  220. default:
  221. break;
  222. }
  223. rowCount++;
  224. }
  225. }
  226. /// <summary>
  227. /// 武器的导入
  228. /// </summary>
  229. /// <param name="target"></param>
  230. /// <param name="workbook"></param>
  231. private void Weapon(TargetType target, dynamic workbook)
  232. {
  233. if (Directory.Exists(XmlFolderPicker.SelectedPathOrFileName + "\\Weapon\\"))
  234. {
  235. Directory.Delete(XmlFolderPicker.SelectedPathOrFileName + "\\Weapon\\", true);
  236. }
  237. Directory.CreateDirectory(XmlFolderPicker.SelectedPathOrFileName + "\\Weapon\\");
  238. //武器的导入
  239. dynamic worksheet = workbook.Sheets(3);
  240. int rowCount = 4;
  241. while (!String.IsNullOrEmpty(worksheet.Cells(rowCount, 2).Text))
  242. {
  243. Card.WeaponCard Weapon = new Card.WeaponCard();
  244. Weapon.SN = worksheet.Cells(rowCount, 2).Text;
  245. Weapon.Name = worksheet.Cells(rowCount, 3).Text;
  246. Weapon.Description = worksheet.Cells(rowCount, 4).Text;
  247. Weapon.Class = CardUtility.GetEnum<Card.CardUtility.ClassEnum>(worksheet.Cells(rowCount, 5).Text, Card.CardUtility.ClassEnum.中立);
  248. Weapon.StandardCostPoint = CardUtility.GetInt(worksheet.Cells(rowCount, 7).Text);
  249. Weapon.ActualCostPoint = Weapon.StandardCostPoint;
  250. Weapon.StandardAttackPoint = CardUtility.GetInt(worksheet.Cells(rowCount, 8).Text);
  251. Weapon.标准耐久度 = CardUtility.GetInt(worksheet.Cells(rowCount, 9).Text);
  252. Weapon.Rare = CardUtility.GetEnum<Card.CardBasicInfo.稀有程度>(worksheet.Cells(rowCount, 12).Text, CardBasicInfo.稀有程度.白色);
  253. Weapon.IsCardReady = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 13).Text);
  254. switch (target)
  255. {
  256. case TargetType.MongoDB:
  257. //innerCollection.Insert<Card.WeaponCard>(Weapon);
  258. break;
  259. case TargetType.Xml:
  260. XmlSerializer xml = new XmlSerializer(typeof(Card.WeaponCard));
  261. String XmlFilename = XmlFolderPicker.SelectedPathOrFileName + "\\Weapon\\" + Weapon.SN + ".xml";
  262. xml.Serialize(new StreamWriter(XmlFilename), Weapon);
  263. break;
  264. default:
  265. break;
  266. }
  267. rowCount++;
  268. }
  269. }
  270. /// <summary>
  271. ///
  272. /// </summary>
  273. /// <param name="sender"></param>
  274. /// <param name="e"></param>
  275. private void btnImportXML_Click(object sender, EventArgs e)
  276. {
  277. Card.CardUtility.Init(@"C:\炉石Git\CardHelper\CardXML");
  278. }
  279. private void frmExport_Load(object sender, EventArgs e)
  280. {
  281. Card.CardUtility.CardXmlFolder = @"C:\炉石Git\CardHelper\CardXML";
  282. XmlFolderPicker.SelectedPathOrFileName = Card.CardUtility.CardXmlFolder;
  283. ExcelPicker.SelectedPathOrFileName = @"C:\炉石Git\炉石设计\卡牌整理版本.xls";
  284. }
  285. }
  286. }