EXCEL导出

 /// <summary>
        /// 导出Excel
        /// </summary>
        /// <param name="table"></param>
        public void WriteToExcel(DataGridView dgv)
        {
            try
            {
                SaveFileDialog dialog = new SaveFileDialog
                {
                    Title = "保存",
                    Filter = "Excel(*.xls)|*.xls|所有文件(*.*)|*.*",
                    RestoreDirectory = true
                };
                if (dialog.ShowDialog() == DialogResult.OK)
                {
                    System.IO.StreamWriter sw = new System.IO.StreamWriter(dialog.FileName, true, System.Text.Encoding.Default); //写入流
                    object[] values = new object[dgv.Columns.Count];
                    for (int i = 0; i < dgv.Columns.Count; ++i)
                    {
                        sw.Write(dgv.Columns[i].HeaderText.ToString());
                        sw.Write('\t');
                    }
                    sw.Write("\r\n");
                    for (int i = 0; i < dgv.Rows.Count; i++)
                    {
                        for (int j = 0; j < values.Length; ++j)
                        {
                            if (dgv.Rows[i].Cells[j].Value != null)
                            {
                                sw.Write(dgv.Rows[i].Cells[j].Value.ToString());
                            }
                            sw.Write('\t');
                        }
                        sw.Write("\r\n");
                    }
                    sw.Flush();
                    sw.Close();
                    MessageBox.Show("成功导出[" + dgv.Rows.Count.ToString() + "]行到Execl!");
                }
            }
            catch
            {
                MessageBox.Show("导出Execl失败!");
            }
        }

        #region 導出Excel
        public void outPutExcel(DataGridView dgv)
        {
            SaveFileDialog dialog = new SaveFileDialog
            {
                Title = "保存",
                Filter = "Excel(*.xls)|*.xls|所有文件(*.*)|*.*",
                RestoreDirectory = true
            };
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                if (dgv.Rows.Count == 0) return;
                Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
                if (xlApp == null)
                {
                    return;
                }
                //創建Excel對象
                Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
                Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
                //Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
                Microsoft.Office.Interop.Excel.Worksheet worksheet = null;
                worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
                if (worksheet == null)
                {
                    worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(Type.Missing, Type.Missing, 1, Type.Missing);
                }
                //else
                //{
                //    //worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(Type.Missing, worksheet, 1, Type.Missing);
                //}
                Microsoft.Office.Interop.Excel.Range range = null;
                long totalCount = dgv.Rows.Count;
                long rowRead = 0;
                float percent = 0;
                worksheet.Name = "明細資料一";//第一个sheet在Excel中显示的名称
                ////写入标题
                for (int i = 0; i < dgv.Columns.Count; i++)
                {
                    worksheet.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
                    range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1];
                    range.Interior.ColorIndex = 15;//背景颜色
                    range.Font.Bold = true;//粗体
                    range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;//居中
                    //加边框
                    range.BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, null);
                    //range.ColumnWidth = dgv.Columns[i].Width;//设置列宽
                    range.EntireColumn.AutoFit();//自动调整列宽
                    //r1.EntireRow.AutoFit();//自动调整行高
                }
                //写入内容
                for (int r = 0; r < dgv.Rows.Count; r++)
                {
                    for (int i = 0; i < dgv.Columns.Count; i++)
                    {
                        worksheet.Cells[r + 2, i + 1] = dgv.Rows[r].Cells[i].Value;
                        range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[r + 2, i + 1];
                        range.Font.Size = 9;//字体大小
                        //加边框
                        range.BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, null);
                        range.EntireColumn.AutoFit();//自动调整列宽
                    }
                    rowRead++;
                    percent = ((float)(100 * rowRead)) / totalCount;
                }
                range.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideHorizontal].Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin;
                if (dgv.Columns.Count > 1)
                {
                    range.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideVertical].Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin;
                }
                //下面是将Excel存储在服务器上指定的路径与存储的名称
                try
                {
                    string tPath = dialog.FileName;
                    workbook.SaveCopyAs(tPath);
                    if ( MessageBox.Show("导出Excel成功")== DialogResult.OK)
                    {
                        KillProcess("EXCEL");
                    }
                }
               catch (Exception ex)
                {
                    string strMsgErr = "生成Excel附件過程中出現異常,詳細信息如:" + ex.ToString();
                }       
            }
        }
        /// <summary>
        /// 杀死进程
        /// </summary>
        /// <param name="processName"></param>
        private void KillProcess(string processName)
        {
            System.Diagnostics.Process myproc = new System.Diagnostics.Process();
            //得到所有打开的进程
            try
            {
                foreach (System.Diagnostics.Process thisproc in System.Diagnostics.Process.GetProcessesByName(processName))
                {
                    //if (!thisproc.CloseMainWindow())
                    if (thisproc.ProcessName == "EXCEL")
                    {
                        thisproc.Kill();
                        break;
                    }
                }
            }
            catch (Exception Exc)
            {
                throw new Exception("", Exc);
            }
        }
        #endregion

原文地址:https://www.cnblogs.com/Iyce/p/2738658.html