| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1650 人关注过本帖
标题:C#中导出datagridView中的数据保存为Excel,弹错,求指点,急需
只看楼主 加入收藏
xintuhai
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2014-10-12
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:7 
C#中导出datagridView中的数据保存为Excel,弹错,求指点,急需
//创建Excel对象
                    Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
                    excel.Application.Workbooks.Add(true);
                    //生成字段名称
                    for (int i = 0; i < dataGridView5.ColumnCount; i++)
                    {
                        excel.Cells[1, i + 1] = dataGridView5.Columns[i].HeaderText;
                    }
                    //填充数据
                    for (int i = 0; i < dataGridView5.RowCount - 1; i++)   //循环行
                    {
                        for (int j = 0; j < dataGridView5.ColumnCount; j++) //循环列
                        {
                            if (dataGridView5[j, i].ValueType == typeof(string))
                            {
                                excel.Cells[i + 2, j + 1] = "'" + dataGridView5.Rows[i].Cells[j].Value.ToString();
                            }
                            else
                            {
                                excel.Cells[i + 2, j + 1] = dataGridView5;
                            }
                        }
                        //设置禁止弹出保存和覆盖的询问提示框  
                        excel.Visible = false;
                        excel.DisplayAlerts = false;
                        excel.AlertBeforeOverwriting = false;
                        //保存到临时工作簿
                        //excel.Application.Workbooks.Add(true).Save();
                        //保存文件
                        excel.Save("D:" + "\\234.xls");
                        excel.Quit();

                    }

每次到这一句  excel.Application.Workbooks.Add(true);的时候,就弹错
无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Excel._Application”。此操作失败的原因是对 IID 为“{000208D5-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY))。

哪位大神指点一下,感激不尽

[ 本帖最后由 xintuhai 于 2015-6-12 22:08 编辑 ]
搜索更多相关主题的帖子: Excel excel 
2015-06-12 22:06
Maick
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:32
帖 子:251
专家分:1314
注 册:2012-9-21
收藏
得分:20 
public static void DoForExcel(DataGridView dgv, string reportTitle)
        {
            #region 验证可操作性

            //定义表格内数据的行数和列数
            int rowscount = dgv.Rows.Count;
            int colscount = dgv.Columns.Count;
            //行数必须大于0
            if (rowscount <= 0)
            {
                MessageBox.Show("没有数据可供保存", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            //列数必须大于0
            if (colscount <= 0)
            {
                MessageBox.Show("没有数据可供保存", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            //行数不可以大于65536
            if (rowscount > 65536)
            {
                MessageBox.Show("数据记录数太多(最多不能超过65536条),不能保存", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            //列数不可以大于255
            if (colscount > 255)
            {
                MessageBox.Show("数据记录行数太多,不能保存", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            #endregion 验证可操作性

            Excel.Application xlApp = new Excel.ApplicationClass();
            if (xlApp == null)
            {
                MessageBox.Show("Excel无法启动", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            int rowIndex = 2;
            int colIndex = 0;
            Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
            Excel.Range range = xlApp.get_Range(xlApp.Cells[1, 1], xlApp.Cells[1, dgv.ColumnCount]);
            range.MergeCells = true;
            xlApp.ActiveCell.FormulaR1C1 = reportTitle;
            xlApp.ActiveCell.Font.Size = 14;
            xlApp.ActiveCell.Font.Bold = true;

            foreach (DataGridViewColumn column in dgv.Columns)
            {
                colIndex = colIndex + 1;
                xlApp.Cells[2, colIndex] = column.HeaderText;
            }

            for (int row = 0; row < dgv.Rows.Count; row++)
            {
                rowIndex = rowIndex + 1;
                for (int col = 0; col < dgv.Columns.Count; col++)
                {
                  
                    if (dgv.Rows[row].Cells[col].ValueType == System.Type.GetType("System.String"))
                    {
                        xlApp.Cells[rowIndex, col + 1] = "'" + dgv.Rows[row].Cells[col].Value.ToString();
                    }
                    else
                    {
                        xlApp.Cells[rowIndex, col + 1] = dgv.Rows[row].Cells[col].Value.ToString();
                    }
                }
            }

            xlApp.get_Range(xlApp.Cells[2, 1], xlApp.Cells[2, dgv.Columns.Count]).Font.Bold = true;
            xlApp.get_Range(xlApp.Cells[2, 1], xlApp.Cells[rowIndex, colIndex]).Borders.LineStyle = 1;
            xlApp.Cells.EntireColumn.AutoFit();
            xlApp.Cells.VerticalAlignment = Excel.Constants.xlCenter;
            xlApp.Cells.HorizontalAlignment = Excel.Constants.xlLeft;

            try
            {
                xlApp.Save(System.DateTime.Now.Millisecond.ToString());
            }
            catch
            {

            }
            finally
            {
                xlApp.Quit();
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
                GC.Collect();

            }
        }
2015-06-13 09:56
Maick
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:32
帖 子:251
专家分:1314
注 册:2012-9-21
收藏
得分:0 
回复 2楼 Maick
using Excel = Microsoft.Office.Interop.Excel;
2015-06-13 09:57
xintuhai
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2014-10-12
收藏
得分:0 
回复 2楼 Maick
我是要点击button按钮,然后导出成本地Excel
2015-06-13 22:48
xintuhai
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2014-10-12
收藏
得分:0 
回复 2楼 Maick
图片附件: 游客没有浏览图片的权限,请 登录注册
运行到这里的时候还是包同样的错误,怎么回事呢?大神
2015-06-14 10:27
Maick
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:32
帖 子:251
专家分:1314
注 册:2012-9-21
收藏
得分:0 
以下是百度结果:

这个真心是版本问题,我以前遇到过类似的,不仅仅和EXCEL有关,和VS也可能相关,当年我用VS2012旗舰版就不行,express版就好使!这问题不是技术能解决的!就是版本!

是不是安装了WPS,用WPS自带的卸载程序卸载,就可以了
2015-06-15 11:03
Maick
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:32
帖 子:251
专家分:1314
注 册:2012-9-21
收藏
得分:0 
遇到过类似情况,当时是装了wps,后来卸载了,就出问题了。后来搜索注册表,把wps相关的项删除了就好了。
2015-06-15 11:07
Maick
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:32
帖 子:251
专家分:1314
注 册:2012-9-21
收藏
得分:0 
这很可能是你安装了某个版本的office,然后手工删除它(或者使用不靠谱垃圾杀毒软件“强杀”它),造成注册表错误。因此要注意千万不要用360之类的软件一流氓手段去卸载正规的软件,应该使用人家软件自己的卸载方法!

除了重装操作系统,没有什么特别好的解决办法。如果你懂一些,可以手工去清理注册表,然后再次安装office。

层主说得对,我第一次用某60卸载某山的WPS,完全卸不干净啊,就粗线了这种异常.我的方法是,重新下载WPS,安装,并用WPS的卸载程序卸载,然后就没有然后了,完美解决。
2015-06-15 11:08
快速回复:C#中导出datagridView中的数据保存为Excel,弹错,求指点,急需
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022552 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved