您的位置:首页 > 其它

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

2007-06-12 12:56 627 查看
许多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的复杂绑定,将在以后介绍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: