DataGridView 导出到Excel代码

方法一(推荐使用这个方法,因为他可以另存为,哪个更快就要使用者测试了,这里只提供方法):

/// <summary>
/// 收费项目---Excel
/// </summary>
private void BtnExcel_Click(object sender, EventArgs e)
{
    if (DgvFeeInspection.Rows.Count == 0)
    {
        CountdownMsgFrm.ShowMsg("无法进行导出,请确定您已经查询出数据!");
        return;
    }
    FunFee.ExportExcel("收费项目" + DateTime.Now.ToString("yyyy-MM-dd") + "", DgvFeeInspection);
}

/// <summary>
        /// 导出到Excel方法
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="myDGV"></param>
public void ExportExcel(string fileName, DataGridView myDGV)
{
            string saveFileName = "";
            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("导出文件时出错,文件可能正被打开!\n" + ex.Message);
                }


            }
            xlApp.Quit();
            GC.Collect();//强行销毁
            //if (fileSaved && System.IO.File.Exists(saveFileName)) System.Diagnostics.Process.Start(saveFileName); //打开EXCEL
            CountdownMsgFrm.ShowMsg(fileName + "生成成功!");

}

方法二:

DataGridView控件的数据导出到Excel代码,
          
        /// <summary>   
        /// 将DataGridView控件中数据导出到Excel   
        /// </summary>   
        /// <param name="gridView">DataGridView对象</param>   
        /// <param name="isShowExcle">是否显示Excel界面</param>   
        /// <returns></returns>   
        public bool ExportDataGridview(DataGridView gridView, bool isShowExcle)   
        {   
            if (gridView.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 < gridView.ColumnCount; i++)   
            {   
                excel.Cells[1, i + 1] = gridView.Columns[i].HeaderText;   
            }   
            //填充数据   
            for (int i = 0; i < gridView.RowCount - 1; i++)         //循环行   
            {   
                   
                for (int j = 0; j < gridView.ColumnCount; j++)      //循环列   
                {                      
                    if (gridView[j, i].ValueType == typeof(string)) //判断DataGirdView中数据的类型   
                    {   
                        excel.Cells[i + 2, j + 1] = "'" + gridView[j, i].Value.ToString();   
                    }   
                    else  
                    {   
                        excel.Cells[i + 2, j + 1] = gridView[j, i].Value.ToString();   
                    }   
                }   
            }   
            return true;   
        }   
        private void button1_Click(object sender, EventArgs e)   
        {   
            this.ExportDataGridview(dataGridView1, true);   
        }   
引用DLL

DataGridView <wbr>导出到Excel代码

posted @ 2012-05-27 10:52  风与雨无阻  阅读(258)  评论(0编辑  收藏  举报