C#의 DataGridView의 내용을 Excel 로 내보내는 방법입니다.
using System; using System.Reflection; using System.Windows.Forms; private void Export2Excel(DataGridView datagridview, bool captions) { object objApp_Late; object objBook_Late; object objBooks_Late; object objSheets_Late; object objSheet_Late; object objRange_Late; object[] Parameters; string[] headers = new string[datagridview.ColumnCount]; string[] columns = new string[datagridview.ColumnCount]; int i = 0; int c = 0; for (c = 0; c < datagridview.ColumnCount; c++) { headers[c] = datagridview.Rows[0].Cells[c].OwningColumn.HeaderText.ToString(); i = c + 65; columns[c] = Convert.ToString((char)i); } try { // Get the class type and instantiate Excel. Type objClassType; objClassType = Type.GetTypeFromProgID("Excel.Application"); objApp_Late = Activator.CreateInstance(objClassType); //Get the workbooks collection. objBooks_Late = objApp_Late.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, objApp_Late, null); //Add a new workbook. objBook_Late = objBooks_Late.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, objBooks_Late, null); //Get the worksheets collection. objSheets_Late = objBook_Late.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, null, objBook_Late, null); //Get the first worksheet. Parameters = new Object[1]; Parameters[0] = 1; objSheet_Late = objSheets_Late.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, objSheets_Late, Parameters); if (captions) { // Create the headers in the first row of the sheet for (c = 0; c < datagridview.ColumnCount; c++) { //Get a range object that contains cell. Parameters = new Object[2]; Parameters[0] = columns[c] + "1"; Parameters[1] = Missing.Value; objRange_Late = objSheet_Late.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, objSheet_Late, Parameters); //Write Headers in cell. Parameters = new Object[1]; Parameters[0] = headers[c]; objRange_Late.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, objRange_Late, Parameters); } } // Now add the data from the grid to the sheet starting in row 2 for (i = 0; i < datagridview.RowCount; i++) { for (c = 0; c < datagridview.ColumnCount; c++) { //Get a range object that contains cell. Parameters = new Object[2]; Parameters[0] = columns[c] + Convert.ToString(i + 2); Parameters[1] = Missing.Value; objRange_Late = objSheet_Late.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, objSheet_Late, Parameters); //Write Headers in cell. Parameters = new Object[1]; Parameters[0] = datagridview.Rows[i].Cells[c].Value.ToString(); objRange_Late.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, objRange_Late, Parameters); } } //Return control of Excel to the user. Parameters = new Object[1]; Parameters[0] = true; objApp_Late.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, objApp_Late, Parameters); objApp_Late.GetType().InvokeMember("UserControl", BindingFlags.SetProperty, null, objApp_Late, Parameters); } catch (Exception theException) { String errorMessage; errorMessage = "Error: "; errorMessage = String.Concat(errorMessage, theException.Message); errorMessage = String.Concat(errorMessage, " Line: "); errorMessage = String.Concat(errorMessage, theException.Source); MessageBox.Show(errorMessage, "Error"); } }