Excel开发系列二 解决.net生成Excel文件速度问题的若干方案

许多csdn上的朋友在寻求如何提高生成Excel时写表格的速度,我在这有点见解,以供大家分享。

首先是SreenUpdateing 属性,这个属性是Application的属性,它指示是否在生成Excel时,你需要及时更新显示屏。当然,在生成时,最好不要这样,然而在生成后,你需要将这个属性设置为true,原因就不说了吧。

当然,在生成之前,你最好能将其可见这个属性设置为false,生成后才显示,那样也能稍微提高点效率。

另外,我还有个秘密武器,就是C#与Excel的交互时,每次都需要调用Excel的接口,所以,如果你是用2层循环来对每个格子赋值,那么你对每个格子赋值的时候,都需要调用Excel的接口,那是非常耗资源的,然而有另外一种办法来解决这个问题。即对一个范围进行赋值。

//此代码基于vs2005下的vsto2005平台下的部分代码。

        private void DataBind()
        {
            dbname = @"C:/Documents and Settings/xiangx/桌面/MTshapeUp.mdb";
            string Dbname = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=" + dbname;
            OleDbConnection con = new OleDbConnection(Dbname);
            OleDbCommand com = new OleDbCommand("select * from T_MT_INFO_RULE");
            try
            {
                con.Open();
                com.CommandType = CommandType.Text;
                com.Connection = con;
                OleDbDataAdapter da = new OleDbDataAdapter(com);
                ds = new DataSet("Test");


                da.Fill(ds);
            }
            catch
            {
           
            }
            finally
            {
                con.Close();
            }
          DataTable dt = ds.Tables[0];
           
            Excel.Worksheet ws = (Excel.Worksheet)Application.ActiveSheet;
            Excel.Range rng = ws.get_Range("A2","E3");

          string [,]datasource = Tabletoarrays(dt);

//使用二维数组对这个范围进行简单赋值。

          rng.Value2 = datasource;

          Application.DisplayAlerts = false;
         

          GC.Collect();
 

        }

        private  string[,] Tabletoarrays(DataTable dt)
        {
            int tablerows = dt.Rows.Count;
            int tablecols = dt.Columns.Count;
            string[,] Arrays = new string[tablerows, tablecols];
            for (int i = 0; i < tablerows; i++)
            {
                for (int j = 0; j < tablecols; j++)
                {
                    Arrays[i, j] = Convert.ToString(dt.Rows[i][j]);
                }
            }
            return Arrays;
        }

这个value指示的是简单邦定,还有对于Datasourse的复杂绑定,将在以后介绍。

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值