private static void AddPropertyToDynamicType(TypeBuilder typeBuilder, _PropertyInfo property) { FieldBuilder propertyField = typeBuilder.DefineField("_" + property.Name.ToLower(), property.PropertyType, FieldAttributes.Private); PropertyBuilder propertyBuilder = typeBuilder.DefineProperty(property.Name, System.Reflection.PropertyAttributes.HasDefault, property.PropertyType, Type.EmptyTypes); MethodAttributes getSetAttr = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig; MethodBuilder getMethodBuilder = typeBuilder.DefineMethod("get_" + property.Name, getSetAttr, property.PropertyType, Type.EmptyTypes); ILGenerator propertyGetIL = getMethodBuilder.GetILGenerator(); propertyGetIL.Emit(OpCodes.Ldarg_0); propertyGetIL.Emit(OpCodes.Ldfld, propertyField); propertyGetIL.Emit(OpCodes.Ret); MethodBuilder setMethodBuilder = typeBuilder.DefineMethod("set_" + property.Name, getSetAttr, null, new Type[] { property.PropertyType }); ILGenerator propertySetIL = setMethodBuilder.GetILGenerator(); propertySetIL.Emit(OpCodes.Ldarg_0); propertySetIL.Emit(OpCodes.Ldarg_1); propertySetIL.Emit(OpCodes.Stfld, propertyField); propertySetIL.Emit(OpCodes.Ret); propertyBuilder.SetGetMethod(getMethodBuilder); propertyBuilder.SetSetMethod(setMethodBuilder); }
public void jinxiu() { try { Excel.Range ranges = thisWorkSheet.UsedRange; string PathHeader = $@"{workPath}result\"; WriteLine(PathHeader); if (!Directory.Exists(PathHeader)) { Directory.CreateDirectory(PathHeader); } List <model> list = new List <model>(); for (int i = 3; i <= ranges.Rows.Count; i++) { model m = new model(); for (int j = 1; j <= KeyNum; j++) { _PropertyInfo p = m.GetType().GetProperty(ranges.Cells[2, j].Text); p.SetValue(m, ranges.Cells[i, j].Text, null); } list.Add(m); } //根据Date4 经管通知时间 进行分组 var q = from m in list group m by m.Date4 into g select g; //g 为分组之后的集合 foreach (var g in q) { Word.Table table1 = getTable(doc, "table1"); Word.Table table2 = getTable(doc, "table2"); //g.Key 为去重以后的经管通知时间 string date4 = g.Key; WriteLine(date4); //根据每个分组生成word foreach (model m in g) { WriteLine($"{m.Name}: {m.Date3}"); if (!(m.Date3 == "" || m.Date3 == null)) { //1.进修结束 table1.Rows.Add(); table1.Rows[table1.Rows.Count - 1].Cells[1].Range.Text = m.Name; table1.Rows[table1.Rows.Count - 1].Cells[2].Range.Text = m.Class; table1.Rows[table1.Rows.Count - 1].Cells[3].Range.Text = m.Place; table1.Rows[table1.Rows.Count - 1].Cells[4].Range.Text = m.Date1; table1.Rows[table1.Rows.Count - 1].Cells[5].Range.Text = m.Date3; } else { //2.外出进修 table2.Rows.Add(); table2.Rows[table2.Rows.Count - 1].Cells[1].Range.Text = m.Name; table2.Rows[table2.Rows.Count - 1].Cells[2].Range.Text = m.Class; table2.Rows[table2.Rows.Count - 1].Cells[3].Range.Text = m.Place; table2.Rows[table2.Rows.Count - 1].Cells[4].Range.Text = m.Date1; } } doc.Variables.Add("mydate", date4); doc.Fields.Update(); doc.SaveAs2($@"{PathHeader}{date4.Substring(0, 8)} 经管补充说明(进修).docx", FileFormat: Word.WdSaveFormat.wdFormatXMLDocument, LockComments: false, CompatibilityMode: 15); //SaveAs以后,doc就成为了另存为的对象,因此需要关闭 doc.Close(); //然后重新打开模板文件 doc = wordApp.Documents.Open(workPath + templateFileName); // //查看打开的word文档 // //foreach(Word.Document d in wordApp.Documents) //{ // WriteLine($"Word.Documents : {d.Name}"); //} } } catch (Exception e) { WriteLine(e.Message); } finally { doc.Close(Word.WdSaveOptions.wdDoNotSaveChanges); thisWorkBook.Close(false); wordApp.Quit(false); excelApp.Quit(); doc = null; thisWorkBook = null; GC.Collect(); } }
public PropertyInfoAbstraction(_PropertyInfo p) { _P = p; }
private void Sort(IEnumerable items, string sortBy) { List <ListBoxItemData> arrayList = (List <ListBoxItemData>)items; int length = arrayList.Count - 1; _PropertyInfo property = typeof(ListBoxItemData).GetProperty(sortBy); Func <object, object, int> ComparisonFunction; switch (sortBy) { case "Name": case "Type": case "Project": case "Path": ComparisonFunction = StringCompareTo; break; case "LineCount": ComparisonFunction = IntCompareTo; break; case "DateModified": ComparisonFunction = DateTimeCompareTo; break; case "Size": ComparisonFunction = SizeCompareTo; break; default: throw (new NotImplementedException("Unhandled sort parameter.")); } while (true) { bool _swapMade = false; for (int i = 0; i < length; i++) { ListBoxItemData i0 = arrayList[i]; ListBoxItemData i1 = arrayList[i + 1]; if (ComparisonFunction(property.GetValue(i0, null), property.GetValue(i1, null)) > 0) { arrayList[i + 1] = i0; arrayList[i] = i1; _swapMade = true; } } if (!_swapMade) { break; } } Dispatcher.BeginInvoke(() => { files.ItemsSource = null; files.ItemsSource = arrayList; }); }