//给Excel对象添加一个Workbooks
excel.Application.Workbooks.Add(true);
此条语句报错,错误为:内存或磁盘空间不足,Microsoft Office Excel无法再次打开或保存任何文档
1 public void ExportExcel(DataGridView dgv) 2 { 3 if (dgv.Rows.Count == 0) 4 { 5 MessageBox.Show("没有数据可以导出"); 6 return; 7 } 8 //try 9 // { 10 //首先创建一个excel对象 11 Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); 12 excel.Application.Workbooks.Add(true);//给Excel对象添加一个Workbooks 13 //生成excel的列头名称 column为列 14 //row为行 15 for (int i = 0; i < dgvManager.ColumnCount; i++) 16 { 17 excel.Cells[1, i + 1] = dgvManager.Columns[i].HeaderText.ToString(); 18 } 19 //遍历所有行 20 for (int i = 0; i < dgvManager.RowCount - 1; i++) 21 { 22 //遍历所有列 , 从而实现所有单元格的遍历 23 for (int j = 0; j < dgvManager.ColumnCount; j++) 24 { 25 // ps:其中,DataGridView[j,i]表示单元格时,先写列坐标后写行坐标。 26 excel.Cells[i + 2, j + 1] = dgv[j, i].Value.ToString(); 27 } 28 } 29 //excel的一些操作,目的不明 30 excel.DisplayAlerts = false; 31 excel.AlertBeforeOverwriting = false; 32 excel.SaveWorkspace("excel.xls"); 33 MessageBox.Show("导入数据成功"); 34 excel.Quit(); 35 excel = null; 36 // } 37 // catch (Exception e) 38 //{ 39 // MessageBox.Show(e.Message); 40 // } 41 }
红色语句报错了,求高手解答
数据太多了吧,这种方法导excel文件大了就会内存不足了,而且对计算机环境要求很多。
是电脑的问题程序本身没问题的?可是我觉得不可能内存不足到打不开一个excel吧。。。
@夜来沉醉卸妆迟: 建议你导excel不要使用这种方法,这种方法要打开excel的进程,很可能你的程序运行到一半出错,然后excel进程没关闭,你还要去任务管理器去关掉进程才可以,而且如果多个人导也不行,因为一个服务器也打开不了多少个excel进程,建议用NPOI或Epplus操作excel
可以参考这个 http://blog.csdn.net/accountwcx/article/details/8144970
@.net包子: 谢谢,我下载了NPOI,它是一个zip包,要怎么用啊?
@夜来沉醉卸妆迟: 解压,只要那个NPOI.dll,然后把它拉到你的程序建个文件夹放着吧,然后在你的解决方案添加引用,然后找到你拉进来的这个NPOI.dll就可以了
遇到这种问题,一般都推荐你换第三方组件实现,折腾这个com组件,有点吃力还不讨好。
具体怎么实现能说下吗?
@夜来沉醉卸妆迟: 比如选择NPOI或者是EPPlus来实现导出。
不是红色语句报错,我将你的数据源改成如下
//row为行
for (int i = 0; i < 10; i++)
{
excel.Cells[1, i + 1] = "col" + i;
}
//遍历所有行
for (int i = 0; i < 10 - 1; i++)
{
//遍历所有列 , 从而实现所有单元格的遍历
for (int j = 0; j < 10; j++)
{
// ps:其中,DataGridView[j,i]表示单元格时,先写列坐标后写行坐标。
excel.Cells[i + 2, j + 1] = i + "," + j;
}
}
程序并没有报错。
有图为证
@夜来沉醉卸妆迟: 额,你看看下面的代码是不是你的(数据源改了),你可以粘过去跑一下。
public void ExportExcel() { //首先创建一个excel对象 Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); //excel.Visible = false; excel.Application.Workbooks.Add(true);//给Excel对象添加一个Workbooks //生成excel的列头名称 column为列 //row为行 for (int i = 0; i < 10; i++) { excel.Cells[1, i + 1] = "col" + i; } //遍历所有行 for (int i = 0; i < 10 - 1; i++) { //遍历所有列 , 从而实现所有单元格的遍历 for (int j = 0; j < 10; j++) { // ps:其中,DataGridView[j,i]表示单元格时,先写列坐标后写行坐标。 excel.Cells[i + 2, j + 1] = i + "," + j; } } //excel的一些操作,目的不明 excel.DisplayAlerts = false; excel.AlertBeforeOverwriting = false; excel.SaveWorkspace("excel.xls"); MessageBox.Show("导入数据成功"); excel.Quit(); excel = null; }
@火悬崖: 还是一样的,我出错的代码在上边,根本没运行到下边的for,你改了下边能有什么用啊。。。
而且就算有用了,那也不是我要导出去的数据啊。
我估计是电脑问题、、、
@夜来沉醉卸妆迟:。。。重启下电脑
@火悬崖: 我试试吧。。这电脑我服了,我新建个mvc4的web项目 创建了半小时了还在转。。。创建一个mvc4的web项目需要这么长时间准备吗。。。
@夜来沉醉卸妆迟: 额,不需要这么长时间,一分钟之内就能搞定
@火悬崖: 好吧。。。我不知道为什么