728x90

public void SendDataToExcel(DataGridView dgv,string sheetName)
{
 Excel._Application app = new Excel.Application();
 Excel.Workbook workbook;
 Excel.Worksheet worksheet;

 workbook = app.Workbooks.Add(Type.Missing);

 app.Visible = true;

 worksheet = workbook.Sheets["Sheet1"];
 worksheet = workbook.ActiveSheet;

 worksheet.Name = sheetName;
 int colIndex = 0;

 //// storing header part in Excel
 //for (int i = 1; i < dgv.Columns.Count + 1; i++)
 //{
 //    if (dgv.Columns[i - 1].Visible == true)
 //    {
 //        colIndex += 1;
 //        worksheet.Cells[1, colIndex] = dgv.Columns[i - 1].HeaderText;
 //    }    
 //}
 //// storing Each row and column value to excel sheet
 //for (int i = 0; i < dgv.Rows.Count - 1; i++)
 //{
 //    colIndex = 0;
 //    for (int j = 0; j < dgv.Columns.Count; j++)
 //    {
 //        if (dgv.Columns[j].Visible == true)
 //        {
 //            colIndex += 1;
 //            worksheet.Cells[i + 2, colIndex] = dgv.Rows[i].Cells[j].Value == null ? "" : dgv.Rows[i].Cells[j].Value.ToString() ?? "";
 //        }
 //    }
 //}

 // storing header part in Excel
 for (int i = 1; i < 4; i++)
 {
  if (dgv.Columns[i - 1].Visible == true)
  {
   colIndex += 1;
   worksheet.Cells[1, colIndex] = dgv.Columns[i - 1].HeaderText;
  }
 }
 // storing Each row and column value to excel sheet
 for (int i = 0; i < dgv.Rows.Count ; i++)
 {
  colIndex = 0;
  for (int j = 0; j < 3; j++)
  {
   if (dgv.Columns[j].Visible == true)
   {
    colIndex += 1;

    if (i == 0 && j == 2)
    {
     worksheet.Cells[i + 2, colIndex] = dgv.Rows[0].Cells[4].Value == null ? "" : dgv.Rows[0].Cells[4].Value.ToString() ?? "";
    }
    else
    {
     worksheet.Cells[i + 2, colIndex] = dgv.Rows[i].Cells[j].Value == null ? "" : dgv.Rows[i].Cells[j].Value.ToString() ?? "";
    }
   }
  }
 }

 Excel.Range usedRange;
 usedRange = worksheet.UsedRange;

 Excel.Range rangeStart = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[usedRange.Row, usedRange.Column];
 Excel.Range rangeEnd = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[usedRange.Row + usedRange.Rows.Count, usedRange.Column + usedRange.Columns.Count];

 string usedStartPos = rangeStart.Address;
 string usedEndPos = rangeEnd.Address;

 //// BackColor 설정
 //((Excel.Range)excelWorksheet.get_Range("A1", "J1")).Interior.Color = ColorTranslator.ToOle(Color.Navy);
 //((Excel.Range)excelWorksheet.get_Range("A2", "J2")).Interior.Color = ColorTranslator.ToOle(Color.RoyalBlue);

 //// Font Color 설정
 //((Excel.Range)excelWorksheet.get_Range("A1", "J1")).Font.Color = ColorTranslator.ToOle(Color.White);
 //((Excel.Range)excelWorksheet.get_Range("A2", "J2")).Font.Color = ColorTranslator.ToOle(Color.White);


 // 상단 첫번째 Row 타이틀 볼드
 SetHeaderBold(worksheet,1);
  
 // 자동 넓이 지정
 for (int i = 0; i < usedRange.Columns.Count; i++)
 {
  AutoFitColumn(worksheet, i+1);
 }

 // 타이틀 색상
 for (int i = 0; i < usedRange.Columns.Count; i++)
 {
  //worksheet.Cells[1, i+1].Interior.Color = Excel.XlRgbColor.rgbGrey;
  worksheet.Cells[1, i + 1].Interior.ColorIndex = 15;
 }

 
  // 선그리기
 usedRange.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;
 usedRange.Borders.ColorIndex = 1;

 // 정렬
 usedRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;

 //차트화할 셀의영역
 Excel.Range chartArea = worksheet.get_Range("A1", "B30");

 //차트생성
 Excel.ChartObjects chart = (Excel.ChartObjects)worksheet.ChartObjects(Type.Missing);

 //차트위치
 Excel.ChartObject mychart = (Excel.ChartObject)chart.Add(100, 40,800, 400);

 //차트 할당
 Excel.Chart chartPage = mychart.Chart;

 //차트의 데이터 셋팅
 chartPage.SetSourceData(chartArea, Excel.XlRowCol.xlColumns);

 //차트의 형태
 //chartPage.ChartType = Excel.XlChartType.xlCylinderColClustered;
 chartPage.ChartType = Excel.XlChartType.xlColumnClustered;
 app.DisplayAlerts=false;

 // 작업관리자 프로세스 해제
 System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
 System.Runtime.InteropServices.Marshal.FinalReleaseComObject(app);
 

}
//Here is how to set the column Width
public void SetHeaderBold(Excel.Worksheet worksheet, int row)
{
 ((Excel.Range)worksheet.Cells[row, 1]).EntireRow.Font.Bold = true;
}

//Here is how to set the column Width
public void SetColumnWidth(Excel.Worksheet worksheet, int col, int width)
{
 ((Excel.Range)worksheet.Cells[1, col]).EntireColumn.ColumnWidth = width;
}

// Apply the setting so that it would autofit to contents
public void AutoFitColumn(Excel.Worksheet worksheet, int col)
{
 ((Excel.Range)worksheet.Cells[1, col]).EntireColumn.AutoFit();
}

출처 : http://rocabilly.tistory.com/118

 

프로그래밍은 언제나 저의 인내심의 한계를 시험하지만, 하나의 문제를 해결하기 위해 많은 전문 서적들과 아티클들을 읽게 되어 게임으로 비유하자면 경험치를 쌓는 재미가 쏠쏠한 것 같습니다. 그리고 해결했을때의 성취감은 끝내줍니다...성취감도 잠시 또 다른 벽에 부딪히지만 말입니다...:(

오늘은

C#에서 엑셀을 연동하는데 Microsoft.Office.Interop.Excel이 필요하다더군요.

using Microsoft.Office.Interop.Excel;

그런데 자꾸만 Office 부분에 빨간 줄이 들어옵니다..그럼 그렇지 그냥 넘어가는 법이 없습니다...

using Microsoft.Office.Interop.Excel;

1. using Microsoft.Office.Interop.Excel; 요놈을 using Excel = Microsoft.Office.Interop.Excel; 요렇게 바꿔 써봅니다.

그래도 안됩니다...

그리고 다른 방법을 찾았죠...

2.

  1. Project 메뉴에서 Add Reference 로 갑니다.
  2. COM 탭을 선택하세요. Microsoft Excel Object Library을 체크하고 OK 누릅니다.

전 그래도 그대로더군요...

이것 때문에 2시간은 인터넷을 헤맸다는...

3. 중요! OK 누르고 Visual Studio를 껐다가 다시 켜세요...

4.짜잔!!! 부끄럽네요...

Add Reference 메뉴 사용법은 C# 뿐만 아니라 비쥬얼스튜디오에서 지원하는 다른 언어 사용자(저처럼 이걸로 헤매시는 분들은 없으리라 믿습니다만...ㅠㅠ)들도 참고 하시면 되겠습니다.

- See more at: http://nsstbg.tistory.com/52#sthash.HLzdTw5T.dpuf

 

출처 : http://nsstbg.tistory.com/52

728x90

+ Recent posts