天天看點

C# DataGridView 導出到Excel

 public void DataGridViewExportData(DataGridView dgv, string fileName)

        {

            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", "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);

                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  

            string[] array = new string[dgv.Columns.Count];

            //擷取Visble =true 的列   

            foreach (DataGridViewColumn column in dgv.Columns)

            {

                if (column.Visible == true)

                {

                    array[column.DisplayIndex] = column.HeaderText + '|' + column.Name; ;

                }

            }

            int RowsCount = dgv.Rows.Count;

            int ColumnsCount = array.Length;

            int mm = 1;

            for (int i = 0; i < ColumnsCount; i++)

            {

                string[] str = new string[2];

                string ColumnName;

                try

                {

                    str = array.GetValue(i).ToString().Split('|');

                    ColumnName = str[0];

                }

                catch

                {

                    continue;

                }

                //導出列名   

                worksheet.Cells[1, mm] = ColumnName;

                //導出列内容   

                for (int m = 0; m < RowsCount; m++)

                {

                    try

                    {

                        worksheet.Cells[m + 2, mm] = dgv.Rows[m].Cells[str[1]].FormattedValue.ToString();

                    }

                    catch

                    { }

                }

                //執行完一列 mm++   

                mm++;

            }

            worksheet.Columns.EntireColumn.AutoFit();

            if (saveFileName != "")

            {

                try

                {

                    workbook.Saved = true;

                    workbook.SaveCopyAs(saveFileName);

                }

                catch (Exception ex)

                {

                    MessageBox.Show("導出檔案時出錯,檔案可能正被打開!\n" + ex.Message, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);

                }

            }

            xlApp.Quit();

            GC.Collect();//行銷毀  

            //saveFileName +

            MessageBox.Show("儲存完成!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

        }

c#