C# dataGridView数据导出到Excel表

ice_moyan 2014-07-31 02:08:52
小白一枚,求代码?百度了许多都不知道如何操作,求详细步骤?
有的说要在引用的com下添加Excel的引用是哪个 我这有个microsoft Excel 11.0 Object library,一个microsoft Excel 12.0 Object library,还有个microsoft Excel 5.0 (乱码) 要添加哪一个啊?
有的说直接放在一个类中,但是我要在button 中要如何调用啊?
我用的是VS 2010 Office 2007
...全文
6752 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ice_moyan 2014-08-04
  • 打赏
  • 举报
回复
引用 12 楼 u010064760 的回复:
我刚刚做了项目,里面有这个 http://bbs.csdn.net/topics/390849080
http://download.csdn.net/detail/u010064760/7704159 那个页面我下载不了,请问下你能发一份到百度云,或者我邮箱。邮箱地址:ice_moyan@163.com 谢谢了。
祥子爱游戏 2014-08-01
  • 打赏
  • 举报
回复
microsoft Excel 12.0 Object library是offrice 07的。
oop_2637780136 2014-08-01
  • 打赏
  • 举报
回复
DataGridView中的数据导出到Excel表 //加载绑定数据集合 private void Frm_Main_Load(object sender, EventArgs e) { dgv_Message.DataSource = new List<Fruit>() {//绑定数据集合 new Fruit(){Name="甘蔗",Price=30}, new Fruit(){Name="猕猴桃",Price=40}, new Fruit(){Name="菠萝",Price=33}, new Fruit(){Name="香蕉",Price=31}}; dgv_Message.Columns[0].Width = 200;//设置列宽度 dgv_Message.Columns[1].Width = 170;//设置列宽度 } //导出到Excel文档 private Excel.Application G_ea;//定义Word应用程序字段 private object G_missing = //定义G_missing字段并添加引用 System.Reflection.Missing.Value; private void btn_OutPut_Click(object sender, EventArgs e) { List<Fruit> P_Fruit = new List<Fruit>();//创建数据集合 foreach (DataGridViewRow dgvr in dgv_Message.Rows) { P_Fruit.Add(new Fruit()//向数据集合添加数据 { Name = dgvr.Cells[0].Value.ToString(), Price = Convert.ToSingle(dgvr.Cells[1].Value.ToString()) }); } SaveFileDialog P_SaveFileDialog =//创建保存文件对话框对象 new SaveFileDialog(); P_SaveFileDialog.Filter = "*.xls|*.xls"; if (DialogResult.OK ==//确认是否保存文件 P_SaveFileDialog.ShowDialog()) { ThreadPool.QueueUserWorkItem(//开始线程池 (pp) =>//使用lambda表达式 { G_ea = new Microsoft.Office.Interop.Excel.Application();//创建应用程序对象 Excel.Workbook P_wk = G_ea.Workbooks.Add(G_missing);//创建Excel文档 Excel.Worksheet P_ws = (Excel.Worksheet)P_wk.Worksheets.Add(//创建工作区域 G_missing, G_missing, G_missing, G_missing); for (int i = 0; i < P_Fruit.Count; i++) { P_ws.Cells[i + 1, 1] = P_Fruit[i].Name;//向Excel文档中写入内容 P_ws.Cells[i + 1, 2] = P_Fruit[i].//向Excel文档中写入内容 Price.ToString(); }//CodeGo.net/ P_wk.SaveAs(//保存Word文件 P_SaveFileDialog.FileName, G_missing, G_missing, G_missing, G_missing, G_missing, Excel.XlSaveAsAccessMode.xlShared, G_missing, G_missing, G_missing, G_missing, G_missing); ((Excel._Application)G_ea.Application).Quit();//退出应用程序 this.Invoke(//调用窗体线程 (MethodInvoker)(() =>//使用lambda表达式 { MessageBox.Show(//弹出消息对话框 "成功创建Excel文档!", "提示!"); })); }); } }
曹虫 2014-08-01
  • 打赏
  • 举报
回复
刚刚又测试了DataGridVie导出Excel1.2万行,很快的,我的机子3秒完成
曹虫 2014-08-01
  • 打赏
  • 举报
回复
我是先将DataGridVie数据全部转换到DataTable中,这样就可以不使用全选DataGridVie数据,拷贝到剪切板中。我测试6千行还是很快的。http://bbs.csdn.net/topics/390849080
曹虫 2014-08-01
  • 打赏
  • 举报
回复

这个是效果图
曹虫 2014-08-01
  • 打赏
  • 举报
回复
我刚刚做了项目,里面有这个 http://bbs.csdn.net/topics/390849080
  • 打赏
  • 举报
回复
excel组件能够导出,而且技能全面,但是缺点是需要安装Microsoft.Office.Interop。 这个组件好像也不是免费的,如果简单项目,使用NPOI 更轻便一些。
_小黑_ 2014-08-01
  • 打赏
  • 举报
回复
用NPOI 简便
lzx_dy 2014-08-01
  • 打赏
  • 举报
回复
引用 4 楼 ice_moyan 的回复:
[quote=引用 3 楼 lzx_dy 的回复:] 引用 Microsoft.Office.Interop.Excel 版本 11.0.0.0,个人建议 别太高了,否则 在装有2003版的机器上导出会有问题。
Microsoft.Office.Interop.Excel 这个也要引用么? 一共要引用 几个啊?[/quote] 就引用 那一个就可以了
Sitrone 2014-08-01
  • 打赏
  • 举报
回复
推荐用epplus,我目前就是用的这个 给你个我的helper类吧
public static class EPPlusHelper
    {


        /// <summary>
        /// 得到工作薄中的工作表
        /// </summary>
        /// <param name="FilePath">文件路径</param>
        /// <param name="sheetName">表名</param>
        /// <returns>worksheet</returns>
        public static ExcelWorksheet readExcelToWorkSheet(string FilePath, string sheetName)
        {
            ExcelWorksheet worksheet;
            FileInfo existingFile = new FileInfo(FilePath);
            using (ExcelPackage package = new ExcelPackage(existingFile))
            {
                // get the first worksheet in the workbook
                worksheet = package.Workbook.Worksheets[sheetName];
            }
            return worksheet;
        }

        /// <summary>
        /// 得到工作薄中的工作表
        /// </summary>
        /// <param name="FilePath">文件路径</param>
        /// <param name="sheetIndex">表序号,从1开始</param>
        /// <returns>ExcelWorksheet</returns>
        public static ExcelWorksheet readExcelToWorkSheet(string FilePath, int sheetIndex)
        {
            ExcelWorksheet worksheet;
            FileInfo existingFile = new FileInfo(FilePath);

            try
            {
                using (ExcelPackage package = new ExcelPackage(existingFile))
                {
                    // get the first worksheet in the workbook
                    worksheet = package.Workbook.Worksheets[sheetIndex];
                }
                return worksheet;
            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message);
                return null;
            }

        }


        /// <summary>
        /// 添加数据到excel并保存
        /// </summary>
        /// <param name="strTempletExcel">模板Excel文件名,不含后缀</param>
        /// <param name="strTargetExcel">目标文件名,不含后缀</param>
        public static void writeDataToWorkSheet(  string strTargetExcel, DataTable dt)
        {
            if (dt.Rows.Count == 0) return;


            string strOutputDir = Config.strOutputDir;
            DirectoryInfo outputDir = new DirectoryInfo(strOutputDir);



            FileInfo newFile = new FileInfo(outputDir.FullName + strTargetExcel + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xlsx");


            using (ExcelPackage pck = new ExcelPackage(newFile))
            {
                ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Accounts");
                ws.Cells["A1"].LoadFromDataTable(dt, true);
                pck.Save();
            }

            }
       

        /// <summary>
        /// 得到DataTable
        /// </summary>
        /// <param name="path">路径</param>
        /// <returns>DataTable</returns>
        public static DataTable getDataTableFromExcel(string path)
        {
            using (var pck = new OfficeOpenXml.ExcelPackage())
            {
                using (var stream = File.OpenRead(path))
                {
                    pck.Load(stream);
                }
                var ws = pck.Workbook.Worksheets.First();
                DataTable tbl = new DataTable();
                bool hasHeader = true; // adjust it accordingly( i've mentioned that this is a simple approach)
                foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column])
                {
                    tbl.Columns.Add(hasHeader ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column));
                }
                var startRow = hasHeader ? 2 : 1;
                for (var rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
                {
                    var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
                    var row = tbl.NewRow();
                  //  int i = 0;
                    foreach (var cell in wsRow)
                    {
                                         
                        if (cell.Value == null) continue;
                        row[cell.Start.Column - 1] = cell.Value.ToString();
                    }
                    tbl.Rows.Add(row);
                }
                return tbl;
            }
        }
    
    }
ice_moyan 2014-07-31
  • 打赏
  • 举报
回复
引用 3 楼 lzx_dy 的回复:
引用 Microsoft.Office.Interop.Excel 版本 11.0.0.0,个人建议 别太高了,否则 在装有2003版的机器上导出会有问题。
Microsoft.Office.Interop.Excel 这个也要引用么? 一共要引用 几个啊?
lzx_dy 2014-07-31
  • 打赏
  • 举报
回复
引用 Microsoft.Office.Interop.Excel 版本 11.0.0.0,个人建议 别太高了,否则 在装有2003版的机器上导出会有问题。
exception92 2014-07-31
  • 打赏
  • 举报
回复
如果不要求导出格式,参见: http://blog.csdn.net/duanzi_peng/article/details/17414629
bdmh 2014-07-31
  • 打赏
  • 举报
回复
microsoft Excel 12.0 Object library

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧