zoukankan      html  css  js  c++  java
  • c# Datagridview控件导入/导出excel表格

    在写商业软件的时候,我们会经常遇到对excel表格的操控,最常见的就是Datagridview控件导入/导出excel表格。我也同样遇到了。运用了自己的知识,再加上网上的【大部分】都过期的源码,自己写出了这两个方法,当然,和绑定数据库一样,都用到了databel类。 
    导入:

    //private string fileName;  
    
            /// <summary>  
                    /// 将DataGridView中数据导入到Excel  
                    /// </summary>  
                    /// <param name="dgv">DataGridView的名称</param>  
    
            public System.Data.DataTable ImportExcel(string path)
            {
                DataSet ds = new DataSet();
                string strConn = "";
                if (Path.GetExtension(path) == ".xls")
                {
                    strConn = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0;", path);
                }
                else
                {
                    strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 8.0;", path);
                }
                using (var oledbConn = new OleDbConnection(strConn))
                {
                    oledbConn.Open();
                    var sheetName = oledbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new[] { null, null, null, "Table" });
                    var sheet = new string[sheetName.Rows.Count];
                    for (int i = 0, j = sheetName.Rows.Count; i < j; i++)
                    {
                        sheet[i] = sheetName.Rows[i]["TABLE_NAME"].ToString();
                    }
                    var adapter = new OleDbDataAdapter(string.Format("select * from [{0}]", sheet[0]), oledbConn);
                    adapter.Fill(ds);
                }
                return ds.Tables[0];
            }
            public void daoru(){
                string filePath = "";
                OpenFileDialog openFileDialog1 = new OpenFileDialog();
                openFileDialog1.Filter = "excel文件|*.xls";
                openFileDialog1.FilterIndex = 2;
                openFileDialog1.RestoreDirectory = true;
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    filePath = openFileDialog1.FileName;
                    System.Data.DataTable dt = ImportExcel(filePath);
                    this.dataGridView1.DataSource = dt;
                }
       }

    导出:

       public static void ExportExcel(string fileName, DataGridView myDGV)
            {
                if (myDGV.Rows.Count > 0)
                {
    
                    string saveFileName = "";
                    //bool fileSaved = false;  
                    SaveFileDialog saveDialog = new SaveFileDialog();
                    saveDialog.DefaultExt = "xls";
                    saveDialog.Filter = "Excel文件|*.xls";
                    saveDialog.FileName = fileName;
                    saveDialog.ShowDialog();
                    saveFileName = saveDialog.FileName;
                    if (saveFileName.IndexOf(":") < 0) return; //被点了取消   
                    Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
                    if (xlApp == null)
                    {
                        MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel");
                        return;
                    }
    
                    Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
                    Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
                    Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1  
    
                    //写入标题  
                    for (int i = 0; i < myDGV.ColumnCount; i++)
                    {
                        worksheet.Cells[1, i + 1] = myDGV.Columns[i].HeaderText;
                    }
                    //写入数值  
                    for (int r = 0; r < myDGV.Rows.Count; r++)
                    {
                        for (int i = 0; i < myDGV.ColumnCount; i++)
                        {
                            worksheet.Cells[r + 2, i + 1] = myDGV.Rows[r].Cells[i].Value;
                        }
                        System.Windows.Forms.Application.DoEvents();
                    }
                    worksheet.Columns.EntireColumn.AutoFit();//列宽自适应  
                                                          //   if (Microsoft.Office.Interop.cmbxType.Text != "Notification")  
                                                          //   {  
                                                          //       Excel.Range rg = worksheet.get_Range(worksheet.Cells[2, 2], worksheet.Cells[ds.Tables[0].Rows.Count + 1, 2]);  
                                                          //      rg.NumberFormat = "00000000";  
                                                          //   }  
    
                    if (saveFileName != "")
                    {
                        try
                        {
                            workbook.Saved = true;
                            workbook.SaveCopyAs(saveFileName);
                            //fileSaved = true;  
                        }
                        catch (Exception ex)
                        {
                            //fileSaved = false;  
                            MessageBox.Show("导出文件时出错,文件可能正被打开!
    " + ex.Message);
                        }
    
                    }
                    //else  
                    //{  
                    //    fileSaved = false;  
                    //}  
                    xlApp.Quit();
                    GC.Collect();//强行销毁   
                                 // if (fileSaved && System.IO.File.Exists(saveFileName)) System.Diagnostics.Process.Start(saveFileName); //打开EXCEL  
                    MessageBox.Show("导出文件成功", "提示", MessageBoxButtons.OK);
                }
                else
                {
                    MessageBox.Show("报表为空,无表格需要导出", "提示", MessageBoxButtons.OK);
                }
    
            }

    在使用代码段之前不要忘记添加引用:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.OleDb;
    using System.IO;
    using System.Linq;
    using System.Diagnostics;
    using Microsoft.Office.Interop.Excel;

    (⊙o⊙)哦,对了,还不要忘记引用这个!这里写图片描述

  • 相关阅读:
    26. 60s快速定位服务器性能问题
    27. 性能测试总体流程
    18. Jmeter-取样器二
    17. Jmeter-取样器一
    15. Jmeter-配置元件二
    14. Jmeter-配置元件一
    13. Jmeter-定时器
    git 常用命令
    数据库常用操作
    【CSS】文字超出显示省略号&连续字符换行
  • 原文地址:https://www.cnblogs.com/cnote/p/9114728.html
Copyright © 2011-2022 走看看