Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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();
            }
        }
Exemplo n.º 3
0
 public PropertyInfoAbstraction(_PropertyInfo p)
 {
     _P = p;
 }
Exemplo n.º 4
0
        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;
            });
        }
 public PropertyInfoAbstraction(_PropertyInfo p)
 {
     _P = p;
 }