zoukankan      html  css  js  c++  java
  • C_dataGridview导出excel

    C# DataGridView控件中数据导出到Excel
    方法一:


    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.Reflection;
    using Microsoft.Office.Interop.Excel;

    namespace TestEXCLE
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }


            private void button1_Click(object sender, EventArgs e)
            {

                _DataGridView = this.dataGridView1;
                ExportToExcel("www");

            }

         
            private DataGridView _DataGridView;
            private string _FileName = "";

            ///// <summary>
            ///// 构造函数
            ///// </summary>
            ///// <param name="ownerForm">拥用者窗体</param>
            ///// <param name="dataGridView">DataGridView对象</param>
                public Form1(Form ownerForm, DataGridView dataGridView)
                {
               
                _DataGridView = dataGridView;
                }

            /// <summary>
            /// 导出到Excel
            /// </summary>
            /// <param name="pfileName">文件名,不需要带扩展名</param>
            public void ExportToExcel(string pfileName)
            {
                _FileName = pfileName == null ? "未命名" : pfileName.Trim();

                string fileName = ShowSaveFileDialog("Microsoft Excel Document", "Microsoft Excel|*.xls");
                if (fileName != "")
                {
                    try
                    {
                        ExportTo(fileName);
                        OpenFile(fileName);
                    }
                    catch (System.Exception err)
                    {
                        MessageBox.Show(err.Message);
                    }
                }
            }

            /// <summary>
            /// 导出到
            /// </summary>
            /// <param name="fileName">文件名</param>
            private void ExportTo(string fileName)
            {

                //
                //获取指定文件是否存在
                bool isExist = System.IO.File.Exists(fileName);
                //
                //定义一个缺少的object对象           
                object oMis = System.Reflection.Missing.Value;

                //
                //定义一个Excel区域对象,用于保存选择的区域
                Microsoft.Office.Interop.Excel.Range selectRange;
                //
                //声明一Excel Application 对象
                Microsoft.Office.Interop.Excel.ApplicationClass App = null;
                //
                //声明一Excel Workbook 对象
                Microsoft.Office.Interop.Excel.Workbook wb = null;
                //
                //声明一Excel Worksheet 对象
                Microsoft.Office.Interop.Excel.Worksheet ws = null;

                //
                //将当前水标状态保存到临时变量中后将光标置为忙状态
                Cursor currentCursor = Cursor.Current;
                Cursor.Current = Cursors.WaitCursor;

                try
                {
                    App = new Microsoft.Office.Interop.Excel.ApplicationClass();

                    //
                    //判断指定的文件是否存在
                    if (isExist)
                    {
                        //
                        //打开已存在的工作薄 Workbook
                        wb = App.Workbooks.Open(fileName, oMis, oMis, oMis, oMis, oMis, oMis, oMis, oMis, oMis, oMis, oMis, oMis, oMis, oMis);
                        //新建工作表
                        ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.Add(oMis, oMis, 1, oMis);
                        //指定工作表名
                        ws.Name = this.Text + wb.Sheets.Count; //加 wb.Sheets.Count 防止重名
                    }
                    else
                    {
                        //
                        //增加一工作薄 Workbook
                        wb = App.Workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
                        //新建工作薄后默认有一个工作表,取得第一个工作表
                        ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Sheets[1];
                        //指定工作表名
                        ws.Name = this.Text;
                    }

                    //
                    //增加一工作表 Worksheet     

                    //
                    //声明两个变量记录Excle当前操作的行号与列号
                    int rown = 0;
                    int coln = 0;

                    //
                    //声明一变量用于记录当前DatagridView的总行数
                    int colCount = _DataGridView.Columns.Count;

                    _DataGridView.SuspendLayout();

                    //
                    //将DataGirdView列头写入Excel中
                    foreach (DataGridViewColumn dgvc in _DataGridView.Columns)
                    {
                        selectRange = ws.get_Range(ws.Cells[rown + 1, ++coln], ws.Cells[rown + 1, coln]);
                        selectRange.Columns.ColumnWidth = dgvc.Width / 10;
                        selectRange.Interior.ColorIndex = 16;
                        selectRange.Interior.Pattern = Microsoft.Office.Interop.Excel.Constants.xlSolid;
                        selectRange.Font.ColorIndex = 2;
                        selectRange.HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter;
                        selectRange.VerticalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter;
                        selectRange.set_Item(1, 1, dgvc.HeaderText);
                    }

                    //
                    //行号增加一
                    rown++;

                    //
                    //将DataGridView中所有的行数写入Excel中
                    foreach (DataGridViewRow dgvr in _DataGridView.Rows)
                    {
                        for (int i = 0; i < colCount; i++)
                        {
                            selectRange = ws.get_Range(ws.Cells[rown + 1, i + 1], ws.Cells[rown + 1, i + 1]);
                            selectRange.set_Item(1, 1, dgvr.Cells[i].Value);
                        }
                        rown++;
                    }

                    //
                    //写入完成后将有数据的范围内设置其边框与内部线条
                    ws.UsedRange.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeTop].Weight = 3;
                    ws.UsedRange.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom].Weight = 3;
                    ws.UsedRange.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft].Weight = 3;
                    ws.UsedRange.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeRight].Weight = 3;
                    ws.UsedRange.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideHorizontal].Weight = 2;
                    ws.UsedRange.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideVertical].Weight = 2;

                    //
                    //设置Wookbook为已保存状态
                    wb.Saved = true;


                    if (isExist)
                    {
                        wb.Save();
                    }
                    else
                    {
                        //
                        //将当前工作薄保存为指定的文件名
                        wb.SaveCopyAs(fileName);
                    }
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                finally
                {

                    _DataGridView.ResumeLayout();

                    wb.Close(false, null, null);
                    //
                    //退出Excel程序
                    App.Quit();

                    //
                    //将当前光标更改回原来的状态
                    Cursor.Current = currentCursor;
                }

            }
            /// <summary>
            /// 打开文件
            /// </summary>
            /// <param name="fileName">文件名</param>
            private void OpenFile(string fileName)
            {
                if (MessageBox.Show("你想打开这个文件吗?", "导出到...", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    try
                    {
                        System.Diagnostics.Process process = new System.Diagnostics.Process();
                        process.StartInfo.FileName = fileName;
                        process.StartInfo.Verb = "Open";
                        process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
                        process.Start();
                    }
                    catch
                    {
                        MessageBox.Show(this, "你的计算机中未安装Excel,不能打开该文档!" , this.ProductName
                            , MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }

            /// <summary>
            /// 显示保存文件对话框,并返回选择的文件路径
            /// </summary>
            /// <param name="title">对话框的标题</param>
            /// <param name="filter">过滤器</param>
            /// <returns>选择的文件路径</returns>
            private string ShowSaveFileDialog(string title, string filter)
            {
                SaveFileDialog dlg = new SaveFileDialog();
                string name = _FileName;
                int n = name.LastIndexOf(".") + 1;
                if (n > 0) name = name.Substring(n, name.Length - n);
                dlg.Title = "导出到" + title;
                dlg.FileName = name;
                dlg.Filter = filter;
                if (dlg.ShowDialog() == DialogResult.OK) return dlg.FileName;
                return "";
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                // TODO: 这行代码将数据加载到表“testDataSet2.chengji”中。您可以根据需要移动或移除它。
                this.chengjiTableAdapter.Fill(this.testDataSet2.chengji);

            }
        }
    }

    方法二:

    #region DataGridView数据显示到Excel
    /// <summary>
    /// 打开Excel并将DataGridView控件中数据导出到Excel
    /// </summary>
    /// <param name="dgv">DataGridView对象 </param>
    /// <param name="isShowExcle">是否显示Excel界面 </param>
    /// <remarks>
    /// add com "Microsoft Excel 11.0 Object Library"
    /// using Excel=Microsoft.Office.Interop.Excel;
    /// </remarks>
    /// <returns> </returns>
    public bool DataGridviewShowToExcel(DataGridView dgv, bool isShowExcle)
    {
        if (dgv.Rows.Count == 0)
            return false;
        //建立Excel对象
        Excel.Application excel = new Excel.Application();
        excel.Application.Workbooks.Add(true);
        excel.Visible = isShowExcle;
        //生成字段名称
        for (int i = 0; i < dgv.ColumnCount; i++)
        {
            excel.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
        }
        //填充数据
        for (int i = 0; i < dgv.RowCount - 1; i++)
        {
            for (int j = 0; j < dgv.ColumnCount; j++)
            {
                if (dgv[j, i].ValueType == typeof(string))
                {
                    excel.Cells[i + 2, j + 1] = "'" + dgv[j, i].Value.ToString();
                }
                else
                {
                    excel.Cells[i + 2, j + 1] = dgv[j, i].Value.ToString();
                }
            }
        }
        return true;
    }
    #endregion

    方法三:

    #region DateGridView导出到csv格式的Excel
    /// <summary>
    /// 常用方法,列之间加\t,一行一行输出,此文件其实是csv文件,不过默认可以当成Excel打开。
    /// </summary>
    /// <remarks>
    /// using System.IO;
    /// </remarks>
    /// <param name="dgv"></param>
    private void DataGridViewToExcel(DataGridView dgv)
    {
        SaveFileDialog dlg = new SaveFileDialog();
        dlg.Filter = "Execl files (*.xls)|*.xls";
        dlg.FilterIndex = 0;
        dlg.RestoreDirectory = true;
        dlg.CreatePrompt = true;
        dlg.Title = "保存为Excel文件";

        if (dlg.ShowDialog() == DialogResult.OK)
        {
            Stream myStream;
            myStream = dlg.OpenFile();
            StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));
            string columnTitle = "";
            try
            {
                //写入列标题
                for (int i = 0; i < dgv.ColumnCount; i++)
                {
                    if (i > 0)
                    {
                        columnTitle += "\t";
                    }
                    columnTitle += dgv.Columns[i].HeaderText;
                }
                sw.WriteLine(columnTitle);

                //写入列内容
                for (int j = 0; j < dgv.Rows.Count; j++)
                {
                    string columnValue = "";
                    for (int k = 0; k < dgv.Columns.Count; k++)
                    {
                        if (k > 0)
                        {
                            columnValue += "\t";
                        }
                        if (dgv.Rows[j].Cells[k].Value == null)
                            columnValue += "";
                        else
                            columnValue += dgv.Rows[j].Cells[k].Value.ToString().Trim();
                    }
                    sw.WriteLine(columnValue);
                }
                sw.Close();
                myStream.Close();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
            finally
            {
                sw.Close();
                myStream.Close();
            }
        }
    }
    #endregion

    方法四:

    #region DataGridView导出到Excel,有一定的判断性
    /// <summary>
    ///方法,导出DataGridView中的数据到Excel文件
    /// </summary>
    /// <remarks>
    /// add com "Microsoft Excel 11.0 Object Library"
    /// using Excel=Microsoft.Office.Interop.Excel;
    /// using System.Reflection;
    /// </remarks>
    /// <param name= "dgv"> DataGridView </param>
    public static void DataGridViewToExcel(DataGridView dgv)
    {

        #region   验证可操作性

        //申明保存对话框
        SaveFileDialog dlg = new SaveFileDialog();
        //默然文件后缀
        dlg.DefaultExt = "xls ";
        //文件后缀列表
        dlg.Filter = "EXCEL文件(*.XLS)|*.xls ";
        //默然路径是系统当前路径
        dlg.InitialDirectory = Directory.GetCurrentDirectory();
        //打开保存对话框
        if (dlg.ShowDialog() == DialogResult.Cancel) return;
        //返回文件路径
        string fileNameString = dlg.FileName;
        //验证strFileName是否为空或值无效
        if (fileNameString.Trim() == " ")
        { return; }
        //定义表格内数据的行数和列数
        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;
        }

        //验证以fileNameString命名的文件是否存在,如果存在删除它
        FileInfo file = new FileInfo(fileNameString);
        if (file.Exists)
        {
            try
            {
                file.Delete();
            }
            catch (Exception error)
            {
                MessageBox.Show(error.Message, "删除失败 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
        }
        #endregion
        Excel.Application objExcel = null;
        Excel.Workbook objWorkbook = null;
        Excel.Worksheet objsheet = null;
        try
        {
            //申明对象
            objExcel = new Microsoft.Office.Interop.Excel.Application();
            objWorkbook = objExcel.Workbooks.Add(Missing.Value);
            objsheet = (Excel.Worksheet)objWorkbook.ActiveSheet;
            //设置EXCEL不可见
            objExcel.Visible = false;

            //向Excel中写入表格的表头
            int displayColumnsCount = 1;
            for (int i = 0; i <= dgv.ColumnCount - 1; i++)
            {
                if (dgv.Columns[i].Visible == true)
                {
                    objExcel.Cells[1, displayColumnsCount] = dgv.Columns[i].HeaderText.Trim();
                    displayColumnsCount++;
                }
            }
            //设置进度条
            //tempProgressBar.Refresh();
            //tempProgressBar.Visible   =   true;
            //tempProgressBar.Minimum=1;
            //tempProgressBar.Maximum=dgv.RowCount;
            //tempProgressBar.Step=1;
            //向Excel中逐行逐列写入表格中的数据
            for (int row = 0; row <= dgv.RowCount - 1; row++)
            {
                //tempProgressBar.PerformStep();

                displayColumnsCount = 1;
                for (int col = 0; col < colscount; col++)
                {
                    if (dgv.Columns[col].Visible == true)
                    {
                        try
                        {
                            objExcel.Cells[row + 2, displayColumnsCount] = dgv.Rows[row].Cells[col].Value.ToString().Trim();
                            displayColumnsCount++;
                        }
                        catch (Exception)
                        {

                        }

                    }
                }
            }
            //隐藏进度条
            //tempProgressBar.Visible   =   false;
            //保存文件
            objWorkbook.SaveAs(fileNameString, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                    Missing.Value, Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value,
                    Missing.Value, Missing.Value);
        }
        catch (Exception error)
        {
            MessageBox.Show(error.Message, "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            return;
        }
        finally
        {
            //关闭Excel应用
            if (objWorkbook != null) objWorkbook.Close(Missing.Value, Missing.Value, Missing.Value);
            if (objExcel.Workbooks != null) objExcel.Workbooks.Close();
            if (objExcel != null) objExcel.Quit();

            objsheet = null;
            objWorkbook = null;
            objExcel = null;
        }
        MessageBox.Show(fileNameString + "\n\n导出完毕! ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);

    }

    #endregion
    ======================================================================================
    =

    ======================================================================================
    1using Excel = Microsoft.Office.Interop.Excel;方法
     1将DataGridView控件中数据导出到Excel#region 将DataGridView控件中数据导出到Excel
     2        /**//// <summary>
     3        /// 将DataGridView控件中数据导出到Excel
     4        /// </summary>
     5        /// <param name="gridView">DataGridView对象</param>
     6        /// <param name="isShowExcle">是否显示Excel界面</param>
     7        /// <returns></returns>
     8        public bool ExportDataGridview(DataGridView gridView,bool isShowExcle)
     9        {
    10            if (gridView.Rows.Count == 0)
    11                return false;
    12            //建立Excel对象
    13            Excel.Application excel = new Excel.Application();
    14            excel.Application.Workbooks.Add(true);
    15            excel.Visible = isShowExcle;
    16            //生成字段名称
    17            for (int i = 0; i < gridView.ColumnCount; i++)
    18            {
    19                excel.Cells[1, i + 1] = gridView.Columns[i].HeaderText;
    20            }
    21            //填充数据
    22            for (int i = 0; i < gridView.RowCount-1; i++)
    23            {
    24                for (int j = 0; j < gridView.ColumnCount; j++)
    25                {
    26                    if (gridView[j, i].ValueType == typeof(string))
    27                    {
    28                        excel.Cells[i + 2, j + 1] = "'" + gridView[j, i].Value.ToString();
    29                    }
    30                    else
    31                    {
    32                        excel.Cells[i + 2, j + 1] = gridView[j, i].Value.ToString();
    33                    }
    34                }
    35            }
    36            return true;
    37        }
    38        #endregion调用 1 private void btnExcel_Click(object sender,EventArgs e)

    {

    if (!oper.ExportDataGridview(dgvEquiment, true))
    2                MessageBox.Show("表格中没有数据,无法导出数据!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

    }

  • 相关阅读:
    suse12安装详解
    Centos7上部署openstack mitaka配置详解(将疑难点都进行划分)
    菜鸟帮你跳过openstack配置过程中的坑[文末新添加福利]
    openstack中dashboard页面RuntimeError: Unable to create a new session key. It is likely that the cache is unavailable.
    Multiple network matches found for name 'selfservice', use an ID to be more specific.报错
    查看 SELinux状态及关闭SELinux
    SELinux深入理解
    IP地址、子网掩码、网络号、主机号、网络地址、主机地址
    Oracle job procedure 存储过程定时任务
    POI文件导出至EXCEL,并弹出下载框
  • 原文地址:https://www.cnblogs.com/Areas/p/2563127.html
Copyright © 2011-2022 走看看