winform应用使用DataGridView数据导出到Excel

it2022-05-05  94

如题,下面是DataGridView到处到Excel的两种方法,附有第二种的工程代码,最近项目使用到这块,就记下来了,其中第一种效率较第二种较高,但是没有第二种容易设置格式:

Code  DateGridView导出到csv格式的Excel#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       DataGridView导出到Excel,有一定的判断性#region DataGridView导出到Excel,有一定的判断性    /**//// <summary>     ///方法,导出DataGridView中的数据到Excel文件     /// </summary>     /// <remarks>    /// add com "Microsoft Excel 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  

 DataGridViewToExcel.rar

转载于:https://www.cnblogs.com/haokaibo/archive/2009/10/18/1585610.html

相关资源:winform DataGridView数据通过NPOI导出到Excel 2003 2007

最新回复(0)