C#下如何通过不添加对Office的引用,而创建Excel对象

        添加命名空间:  using System.Reflection;

        /// <summary>
        /// 将DataGridView中的数据打印出来
        /// </summary>
        /// <param name="m">接收的消息常量</param>
        public void CmDbGridEhDataPrint(ref System.Windows.Forms.Message m)  //CM_DBGRIDEH_DATA_PRINT
        {
            object ObjApp;
            object ObjBook;
            object ObjBooks;
            object ObjSheets;
            object ObjSheet;
            object[] Arg1, Arg2, Arg3, Arg4, Arg5;
            int I, J, K;
            object Cells1;
            System.Data.DataTable MyTable = null;
            DataGridView obj;
            if (!(ActiveControl is DataGridView))
            {
                return;
            }
            else
            {
                obj = (DataGridView)ActiveControl;

               //反射取得类型
                Type ObjExcel = Type.GetTypeFromProgID("Excel.Application");
                if (ObjExcel == null)
                {
                    SysPublicTools.DJShow("请先安装Excel97/2000。", 1);
                    return;
                }
                try
                {

                     //创建Excel实例
                    ObjApp = Activator.CreateInstance(ObjExcel);

                    //设置可见属性
                    ObjApp.GetType().InvokeMember("Visible", BindingFlags.SetProperty, Type.DefaultBinder, ObjApp, new object[] { "True"});
                    ObjApp.GetType().InvokeMember("UserControl", BindingFlags.SetProperty, Type.DefaultBinder, ObjApp, new object[] { "True" });

                    //获取Workbook集
                    ObjBooks = ObjApp.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, Type.DefaultBinder, ObjApp, null);

                    //添加一个新的Workbook
                    ObjBook = ObjBooks.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, Type.DefaultBinder, ObjBooks, null);

                    //获取Sheet集
                    ObjSheets = ObjBook.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, Type.DefaultBinder, ObjBook, null);

                    //获取第一个Sheet对象
                    Arg1 = new object[1] { 1 };
                    ObjSheet = ObjSheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, Type.DefaultBinder, ObjSheets, Arg1);

                    Arg2 = new object[2] { 1, 1 };
                    Cells1 = ObjSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty, Type.DefaultBinder, ObjSheet, Arg2);
                    Cells1.GetType().InvokeMember("Value2", BindingFlags.SetProperty, Type.DefaultBinder, Cells1, new Object[] { "shubozhong博客" });

                    Arg3 = new object[2] { 2, 1 };
                    Cells1 = ObjSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty, Type.DefaultBinder, ObjSheet, Arg3);
                    Cells1.GetType().InvokeMember("Value2", BindingFlags.SetProperty, Type.DefaultBinder, Cells1, new Object[] { this.Text });

                    J = 1;
                    for (I = 0; I < obj.ColumnCount; I++)
                    {
                        if (!obj.Columns[I].Visible)
                        {
                            continue;
                        }
                        else
                        {
                            Arg4 = new object[2] { 3, J };
                            Cells1 = ObjSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty, Type.DefaultBinder, ObjSheet, Arg4);
                            Cells1.GetType().InvokeMember("Value2", BindingFlags.SetProperty, Type.DefaultBinder, Cells1, new Object[] { obj.Columns[I].HeaderText });
                            J = J + 1;
                        }
                    }
                    if (obj.DataSource != null)
                    {
                        if (obj.DataSource is System.Data.DataTable)
                        {
                            MyTable = (System.Data.DataTable)obj.DataSource;
                        }
                        else
                        {
                            if (obj.DataSource is BindingSource)
                            {
                                BindingSource bs = (BindingSource)obj.DataSource;
                                MyTable = (System.Data.DataTable)bs.DataSource;
                            }
                        }
                    }
                    K = 4;
                    if (MyTable != null)
                    {
                        if (MyTable.Rows.Count > 0)
                        {
                            foreach (DataRow NewRow in MyTable.Rows)
                            {
                                J = 0;
                                for (I = 0; I < obj.Columns.Count; I++)
                                {
                                    J++;
                                    if (!(obj.Columns[I].Visible))
                                    {
                                        J--;
                                        continue;
                                    }
                                    else
                                    {
                                        if (MyTable.Columns[I].ToString().Length != 0)
                                        {
                                            Arg5 = new object[2] { K, J };
                                            Cells1 = ObjSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty, Type.DefaultBinder, ObjSheet, Arg5);
                                            Cells1.GetType().InvokeMember("Value2", BindingFlags.SetProperty, Type.DefaultBinder, Cells1, new Object[] { NewRow.ItemArray[I].ToString() });
                                        }
                                    }
                                }
                                K = K + 1;
                            }
                        }
                    }
                    //ObjApp.GetType().InvokeMember("Quit",BindingFlags.InvokeMethod,Type.DefaultBinder,ObjApp,null);
                }
                catch (Exception err)
                {
                    SysPublicTools.DJShow("创建Excel文件失败,请检查Office软件是否已经正确安装!"+err.Message, 1);
                }
            }
        }

 

上面的代码中,关键的就是用到的  Type.GetType().InvokeMember(),这个方法对于调用是否成功,起着很重要的作用.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值