Range rang=sheet2.get_Range(excelApp.Cells[2,1],excelApp.Cells[/color[color=#FF0000]][dgvCLPshow.Rows.Count+1,dgvCLPshow.Columns.Count]);
object[,] objData=new object[dgvCLPshow.Rows.Count,dgvCLPshow.Columns.Count];
for (int i = 0; i < dgvCLPshow.Rows.Count; i++)
{
for (int j = 0; j < dgvCLPshow.Columns.Count; j++)
{
objData[i,j]= dgvCLPshow.Rows[i].Cells[j].Value;
}
exportCount = i;
}
rang.Value2 = objData;以上红色代码为我添加代码,之前我只是用循环来导出datagridview中的数据到excel,速度真的挺慢的,到网上看了一下,就把这几句代码加上去试一下,谁知道速度却快了好几倍,1万多条数据3秒内就导出了,我想问一下各位上面的那个数组,那样声明是不是算二维数组,但是为什么二维数组可以直接负给excel,而且速度快这么多
object[,] objData=new object[dgvCLPshow.Rows.Count,dgvCLPshow.Columns.Count];
for (int i = 0; i < dgvCLPshow.Rows.Count; i++)
{
for (int j = 0; j < dgvCLPshow.Columns.Count; j++)
{
objData[i,j]= dgvCLPshow.Rows[i].Cells[j].Value;
}
exportCount = i;
}
rang.Value2 = objData;以上红色代码为我添加代码,之前我只是用循环来导出datagridview中的数据到excel,速度真的挺慢的,到网上看了一下,就把这几句代码加上去试一下,谁知道速度却快了好几倍,1万多条数据3秒内就导出了,我想问一下各位上面的那个数组,那样声明是不是算二维数组,但是为什么二维数组可以直接负给excel,而且速度快这么多
解决方案 »
- 将年份信息添加的combobox下拉框
- 请问winform状态栏跑马灯的效果怎么作?
- 关于DataTable dt = new DataTable()和DataTable dt = null的区别?
- C# Process.Start(...) 参数问题
- 在存储过程中怎么判断查询结果有一条以上的记录或没记录,在线等~~~~~~急
- 强名称文件的使用
- 有没有根据一个字符串提供的类名动态创建对象的方法
- .net高手围观,涉及到.net源码问题
- 象VC中有联合的结构在C#中怎么实现?
- 有谁读过 UDDI, SOAP and WSDL: The Web Services Specification Reference Book, 1/e,介绍一下。
- Epson TM-U220 打印机 ESC/POS指令 无法改变中文字符大小(在线等)
- C# 通过一个程序设置另一个程序活动窗体具有焦点控件的文本
object[,] objData=new object[dgvCLPshow.Rows.Count,dgvCLPshow.Columns.Count];
for (int i = 0; i < dgvCLPshow.Rows.Count; i++)
{
for (int j = 0; j < dgvCLPshow.Columns.Count; j++)
{
objData[i,j]= dgvCLPshow.Rows[i].Cells[j].Value;
}
exportCount = i;
}
rang.Value2 = objData;
不过自我感觉还是二维数组导入最好用。把一个二维数组直接赋给一个rang,和把table中一个个元素,分别赋给一个个rang比,当然快很多了。
调用excel本来就慢,一个个操作range就更慢,所以一定要避免一个个操作range.
{
for (int j = 0; j < dgvCLPshow.Columns.Count; j++)
{
objData[i,j]= dgvCLPshow.Rows[i].Cells[j].Value;
}
exportCount = i;
}
上面这个代码本身dgvCLPshow.Rows.Count; 就存在性能问题excel 本身通过二维数组直接定位单元格,不会一行一列定位这就是快的根本原因
但是每次new 一个range,用的时间就多了。
其实说白了,就是给一个range赋值和给无数的range赋值的区别。
相反,首先在内存循环dgv,将dgv的值整合到一个Object[,]中,然后一次性对Range复制,这个过程只需要做一次!