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.
- Project 메뉴에서 Add Reference 로 갑니다.
- 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
'C#' 카테고리의 다른 글
c# 크리스탈리포트 grouptree 숨기기 (0) | 2014.07.26 |
---|---|
크리스탈레포트 innosetup 배포 (0) | 2014.07.24 |
c# datagridview textalign (0) | 2014.07.13 |
c# treeview 마우스 우클릭 (0) | 2014.07.13 |
크리스탈리포트 데이터베이스 로그인 알림창 뜰 때 (0) | 2014.07.06 |