none
C#在winform中如何将datagridview中的数据导出至excel表格? RRS feed

  • 问题

  • C#在winform中如何将datagridview中的数据导出至excel表格?
    新建一个datagridview控件,Button控件,点击button控件,弹出一个对话框,接着就像windows操作界面一样,选择文件名,然后保存,
    在网上找了好多例子,就是实现不了..连类库中也找不到关于操纵excel的类...请高手帮忙....
    2009年9月18日 1:35

答案

  • 你好,你可以看看下面两个地址:
    知识改变命运,奋斗成就人生!
    2009年9月18日 1:38
    版主
  • 这是我做过的一个例子.你可以参考,其中导出的数据来自绑定时的数据源.
    #region 生成单个文件多个表
            public static bool SaveDataTableToExcel(List<Report> l, string filePath, bool isShowExcel,bool CreateMode)
            {
                try
                {
                    Excel.Application app = new Excel.ApplicationClass();
                    app.Visible = isShowExcel;
                    Excel.Workbook wk = app.Workbooks.Add(true);

                    if (l.Count > 0)
                    {
                        if (string.IsNullOrEmpty(l.First().clientNumber))
                        {
                            var p1 = (from q1 in l
                                      select q1.cLientTypeNumber).Distinct().ToList();
                            foreach (var item in p1)
                            {
                                List<Report> pp = (from pp1 in l
                                                   where pp1.cLientTypeNumber == item.ToString()
                                                   select pp1).ToList();
                                Excel.Worksheet ws = wk.Sheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing) as Excel.Worksheet;
                                ws.Name = pp.First().cLientTypeNumber + "(" + pp.First().clientName + ")";
                                SetRows(l, ws, pp);
                            }
                        }
                        else
                        {
                            var p1 = (from q1 in l
                                      select q1.clientNumber).Distinct().ToList();
                            foreach (var item in p1)
                            {

                                List<Report> pp = (from pp1 in l
                                                   where pp1.clientNumber == item.ToString()
                                                   select pp1).ToList();
                                Excel.Worksheet ws = wk.Sheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing) as Excel.Worksheet;
                                ws.Name = pp.First().clientNumber + "(" + pp.First().clientName + ")";
                                SetRows(l, ws, pp);
                            }
                        }
                        //设置禁止弹出保存和覆盖的询问提示框
                        app.DisplayAlerts = false;
                        app.AlertBeforeOverwriting = false;
                        //保存工作簿
                        wk.Save();
                        //Excel.Worksheet ws1 = wk.Sheets.get_Item("Sheet1") as Excel.Worksheet;
                        //ws1.Delete();
                        //wk.Save();
                        //保存excel文件
                        app.Save(filePath);
                        app.SaveWorkspace(filePath);
                        app.Quit();
                        app = null;
                    }
                    return true;
                }
                catch (Exception err)
                {
                    MessageBox.Show("导出Excel出错!可能的解决方法:请关掉已打开的Excel文件再次导出!可能原因:" + err.Message, "提示信息",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return false;
                }
            }
            #endregion
    2009年9月18日 2:54
  • 你好,用Oledb连接Excel 表格 然后将用DataAdpater来导出到Excel表格就可以了
    连接字符串
    connExcel = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";", this.ExcelFilePhysicalPath);
             OleDbConnection oleConn = new OleDbConnection(connExcel);

    如果是从客户端导出可以通过Javascript创建ActiveX来实现


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年9月18日 5:28
    版主

全部回复

  • 你好,你可以看看下面两个地址:
    知识改变命运,奋斗成就人生!
    2009年9月18日 1:38
    版主
  • office调用的类库??我在MSDN的帮助中都找不到....
    2009年9月18日 1:53
  • 你需要安装 Office 然后再项目上添加引用,选 Com 选项卡就能找到了
    知识改变命运,奋斗成就人生!
    2009年9月18日 1:55
    版主
  • 这是我做过的一个例子.你可以参考,其中导出的数据来自绑定时的数据源.
    #region 生成单个文件多个表
            public static bool SaveDataTableToExcel(List<Report> l, string filePath, bool isShowExcel,bool CreateMode)
            {
                try
                {
                    Excel.Application app = new Excel.ApplicationClass();
                    app.Visible = isShowExcel;
                    Excel.Workbook wk = app.Workbooks.Add(true);

                    if (l.Count > 0)
                    {
                        if (string.IsNullOrEmpty(l.First().clientNumber))
                        {
                            var p1 = (from q1 in l
                                      select q1.cLientTypeNumber).Distinct().ToList();
                            foreach (var item in p1)
                            {
                                List<Report> pp = (from pp1 in l
                                                   where pp1.cLientTypeNumber == item.ToString()
                                                   select pp1).ToList();
                                Excel.Worksheet ws = wk.Sheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing) as Excel.Worksheet;
                                ws.Name = pp.First().cLientTypeNumber + "(" + pp.First().clientName + ")";
                                SetRows(l, ws, pp);
                            }
                        }
                        else
                        {
                            var p1 = (from q1 in l
                                      select q1.clientNumber).Distinct().ToList();
                            foreach (var item in p1)
                            {

                                List<Report> pp = (from pp1 in l
                                                   where pp1.clientNumber == item.ToString()
                                                   select pp1).ToList();
                                Excel.Worksheet ws = wk.Sheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing) as Excel.Worksheet;
                                ws.Name = pp.First().clientNumber + "(" + pp.First().clientName + ")";
                                SetRows(l, ws, pp);
                            }
                        }
                        //设置禁止弹出保存和覆盖的询问提示框
                        app.DisplayAlerts = false;
                        app.AlertBeforeOverwriting = false;
                        //保存工作簿
                        wk.Save();
                        //Excel.Worksheet ws1 = wk.Sheets.get_Item("Sheet1") as Excel.Worksheet;
                        //ws1.Delete();
                        //wk.Save();
                        //保存excel文件
                        app.Save(filePath);
                        app.SaveWorkspace(filePath);
                        app.Quit();
                        app = null;
                    }
                    return true;
                }
                catch (Exception err)
                {
                    MessageBox.Show("导出Excel出错!可能的解决方法:请关掉已打开的Excel文件再次导出!可能原因:" + err.Message, "提示信息",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return false;
                }
            }
            #endregion
    2009年9月18日 2:54
  • 如不明白,我可以提供更详细的代码.
    2009年9月18日 2:55
  • Excel.Application app = new Excel.ApplicationClass();
    你用excel.application类创建对象
    调用这个类的命名空间.?这个命名空间哪里来的.我在类库上找了N久就是找不到

    看到网上大多数的例子都是Microsoft.Office.Interop.Excel这个命名空间
    可我在类库中就是无法找到.....

    如上面版主所说.加COM组件.?这个该如何操作..?
    2009年9月18日 4:39
  • 你好,用Oledb连接Excel 表格 然后将用DataAdpater来导出到Excel表格就可以了
    连接字符串
    connExcel = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";", this.ExcelFilePhysicalPath);
             OleDbConnection oleConn = new OleDbConnection(connExcel);

    如果是从客户端导出可以通过Javascript创建ActiveX来实现


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年9月18日 5:28
    版主
  • 不太明白
    connExcel = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";", this.ExcelFilePhysicalPath);
             OleDbConnection oleConn = new OleDbConnection(connExcel);

    我这用的是SQL2000的数据库服务器,用这个OK?
    2009年9月18日 7:37
  • 不太明白
    connExcel = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";", this.ExcelFilePhysicalPath);
             OleDbConnection oleConn = new OleDbConnection(connExcel);

    我这用的是SQL2000的数据库服务器,用这个OK?

    我是说你通过oledb来连接Excel这样就可以直接操作Excel了 比如将DataGridView的数据插入到Excel的Sheet中
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年9月18日 9:04
    版主
  • 1987raymond版主的意思是直接把Excel看成数据源,就像其他数据源一样来操作!
    周雪峰
    2009年9月18日 11:51
    版主
  • 添加引用那有。
    2009年9月20日 1:13
  • 加我QQ,512982554,我给你源码吧。有很多方式。哦,其实显示数据并导出,你可以用报表,非常强大。而且相当简单。
    2009年9月20日 1:16
  • 继续关注!
    做最好的自己
    2009年9月20日 1:34
  • 还是看看我的这篇文章吧,更好用

    .net 通过NPOI或MyXls把DataTable导出到Excel

    http://www.yongfa365.com/Item/NPOI-MyXls-DataTable-To-Excel-From-Excel.html

    2010年8月16日 9:59
  • 你可以都试试。各有优缺点。都了解一下。
    THAT IS ALL ...
    2011年1月7日 11:29