概述
许多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的复杂绑定,将在以后介绍。
最后
以上就是热情篮球为你收集整理的 Excel开发系列二 解决.net生成Excel文件速度问题的若干方案的全部内容,希望文章能够帮你解决 Excel开发系列二 解决.net生成Excel文件速度问题的若干方案所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复