-
[보너스]웹폼에서 엑셀파일 컨트롤.NET 정리 2010. 2. 25. 16:31
VS2008 / Office 2007이 설치된 PC에서 ASP.NET 2.0 기반 웹폼에서 엑셀파일을 컨트롤 하는 내용이다.
1. 엑셀개체 참조추가 방법 첫번째
프로젝트 팝업 메뉴에서 참조추가 를 바로 클릭하거나 속성페이지를 클릭한다.
속성페이지에서 현재 등록된 참조개체들을 확인한다. 참조가 없으면 추가 버튼을 클릭한다.
COM탭에서 Excel 12.0 개체를 추가해 준다.
2. 참조추가 방법 두번째
웹사이트의 팝업메뉴에서 [ASP.NET 폴더 추가] - [Bin(N)] 메뉴를 클릭한다.
Bin 폴더에 그림과 같은 세 파일을 복사해 준다.
3.엑셀파일 컨트롤 예제
protected void btnGetIncome_Click(object sender, EventArgs e)
{
String xlsFile = Server.MapPath("~/test.xls");
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();Microsoft.Office.Interop.Excel.Workbook excelBook = null;
Microsoft.Office.Interop.Excel.Worksheet excelWorksheet = null;// 같은 이름의 파일이 있을경우 무조건 덮어 씌운다.
excelApp.DisplayAlerts = false;
excelApp.AlertBeforeOverwriting = false;if (System.IO.File.Exists(xlsFile) == true) // 서식파일이 있는경우
{
excelApp.Workbooks.Open(xlsFile, Type.Missing, Type.Missing, Type.Missing,Type.Missing,Type.Missing,
Type.Missing,
Type.Missing, Type.Missing, Type.Missing,
false, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
excelWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)excelApp.Worksheets.get_Item("현황");
excelWorksheet.Name = "월간현황";}
else // 서식파일이 없으므로 파일생성
{
excelBook = excelApp.Workbooks.Add(Type.Missing);
excelWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)excelBook.Worksheets[1];
excelWorksheet.Name = "월간현황";
}int row = 3;
foreach (DataRow dr in myTable.Rows)
{
row++;
excelWorksheet.Cells[row, 1] = dr["부서"];
excelWorksheet.Cells[row, 2] = dr["3월"];
excelWorksheet.Cells[row, 3] = dr["4월"];
excelWorksheet.Cells[row, 4] = dr["5월"];
excelWorksheet.Cells[row, 5] = dr["6월"];
excelWorksheet.Cells[row, 6] = dr["7월"];
excelWorksheet.Cells[row, 7] = dr["8월"];
excelWorksheet.Cells[row, 8] = dr["9월"];
excelWorksheet.Cells[row, 9] = dr["10월"];
excelWorksheet.Cells[row, 10] = dr["11월"];
excelWorksheet.Cells[row, 11] = dr["12월"];
excelWorksheet.Cells[row, 12] = dr["1월"];
excelWorksheet.Cells[row, 13] = dr["2월"];
}
excelApp.ActiveWorkbook.SaveAs(xlsFile, Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel8, "","", false, Type.Missing,
Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,
Microsoft.Office.Interop.Excel.XlSaveConflictResolution.xlLocalSessionChanges,
false, Type.Missing, Type.Missing, Type.Missing);
// 엑셀 프로세스를 종료
excelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
KillExcel(DateTime.Now.AddMinutes(-0.1));
ProductsGridView.Visible = true;
}
4.EXCEL.EXE 프로세스 문제excelApp.Quit(); 메서드를 실행하면 화면의 GUI는 살아지지만 프로세스는 남아있다. 윈도우즈 폼의 경우 엑셀프로그램을 화면에 올려주고 사용자가 종료하도록 하면되지만 ASP.NET인경우 상황이 좀 다르다.
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
같은 문장을 비롯 검색을 통해 얻은 여러가지 방법은 제대로 작동 하지 않았다.다만 다음같은 소스를 통해서 모든 엑셀프로세스를 강제종료 할수 있지만 원하는 인스턴스만 종료하는 하는 방법을 찾을 수가 없다. 우선 아쉬운대로 시작시간을 이용하여 최근에 시작한 프로세스를 종료하는 루틴을 만들어 봤다.
// using System.Diagnostics 추가
public static void KillExcel()
{
Process[] AllProcesses = Process.GetProcessesByName("EXCEL");foreach (Process ExcelProcess in AllProcesses)
{
ExcelProcess.Kill();
}
AllProcesses = null;
}
// 주어진 시점 이후 시작한 모든 엑셀 프로세스를 종료시킨다.
public static void KillExcel(DateTime pDate)
{
Process[] AllProcesses = Process.GetProcessesByName("EXCEL");foreach (Process ExcelProcess in AllProcesses)
{
if (ExcelProcess.StartTime < pDate) ExcelProcess.Kill();
}
AllProcesses = null;
}참조 : http://www.cyworld.com/vbman/3166663
'.NET 정리' 카테고리의 다른 글
ASP.NET 표준컨트롤 - Panel, MultiView, Wizard (0) 2010.03.11 APS.NET 표준컨트롤 (0) 2010.03.04 asp.net 의 웹폼에 대하여.. (0) 2010.02.25 ASP.NET Development Model (0) 2010.02.18 ASP.NET Execution Model (0) 2010.02.18