// 시스템을 사용하여;
// System.Collections.Generic를 사용하여;
// System.Text를 사용하여;
// 네임 스페이스 OA_LZZ0902.DAL
// {
// 클래스 Excel123456
// {
//}
//}
시스템을 사용하여;
은 System.Collections을 사용함;
System.Text을 사용함;
System.Data을 사용함;
하여 System.Threading을 사용함;
System.Windows.Forms을 사용함;
System.Collections.Generic을 사용함;
Microsoft.Office.Core을 사용함;
엑셀 = Microsoft.Office.Interop.Excel를 사용하여;
공용 클래스 ExportToExcel
{
대중이 Excel.Application m_xlApp = NULL;
공공 무효 OutputAsExcelFile (된 DataGridView DataGridView에)
{
경우 (dataGridView.Rows.Count <= 0)
{
MessageBox.Show ( "数据 无!", "提示"MessageBoxButtons.OK, MessageBoxIcon.Warning); 반환;
}
문자열적인 filePath = "";
S = 새의 SaveFileDialog의 SaveFileDialog ();
s.Title = "Excel 파일을 저장합니다";
s.Filter = "Excel 파일 (* .XLS) | * .XLS";
s.FilterIndex = 1;
경우 (s.ShowDialog () == DialogResult.OK)
여기서 filePath = s.FileName;
그밖에
반환;
// 첫 번째 단계 : 데이터 테이블에 DataGridView에, 당신은 숨겨진 열 DataGridView에를 필터링 할 수 있도록
DataTable을 tmpDataTable = 새로운 DataTable을 ( "tmpDataTable");
DataTable을 modelTable = 새로운 DataTable을 ( "ModelTable");
대 (INT 컬럼 = 0 칼럼 <dataGridView.Columns.Count 칼럼 ++)
{
(dataGridView.Columns [칼럼] .Visible == TRUE) 경우
{
DataColumn에 tempColumn = 새를 DataColumn (dataGridView.Columns [칼럼] .HeaderText의 typeof (문자열));
tmpDataTable.Columns.Add (tempColumn);
DataColumn에 modelColumn = 새를 DataColumn (dataGridView.Columns [칼럼] .NAME의 typeof (문자열));
modelTable.Columns.Add (modelColumn);
}
}
대 (INT 행 = 0, 로우 <dataGridView.Rows.Count; 행 ++)
{
경우 (dataGridView.Rows [행] .Visible == false)를
잇다;
DataRow를 tempRow tmpDataTable.NewRow = ();
대해 INT (I = 0; i가 tmpDataTable.Columns.Count를 <; 내가 ++)
tempRow [I] = dataGridView.Rows의 [행] .Cells [modelTable.Columns [I] .ColumnName] .Value;
tmpDataTable.Rows.Add (tempRow);
}
경우 (tmpDataTable == NULL)
{
반환;
}
// 2 단계 : 데이터 테이블 Excel로 내보낼
긴 ROWNUM = tmpDataTable.Rows.Count; // 行 数
INT COLUMNNUM = tmpDataTable.Columns.Count; // 列 数
이 Excel.Application m_xlApp = 새이 Excel.Application ();
m_xlApp.DisplayAlerts = 거짓, 변경을 표시하지 않습니다 // 프롬프트
m_xlApp.Visible = 거짓;
Excel.Workbooks 통합 문서 = m_xlApp.Workbooks;
Excel.Workbook 통합 문서 = workbooks.Add (Excel.XlWBATemplate.xlWBATWorksheet);
Excel.Worksheet 워크 = (Excel.Worksheet) workbook.Worksheets [1]; // 取得 시트 1
시험
{
문자열 [] = datas 새로운 캐릭터 [ROWNUM + 1 COLUMNNUM];
// 기록 필드 (; 나는 COLUMNNUM를 <I ++는 i가 0 = INT)
datas [0, I = tmpDataTable.Columns의 [I] .Caption;
//Excel.Range 범위 = worksheet.get_Range (worksheet.Cells [1,1] worksheet.Cells [1 COLUMNNUM]);
Excel.Range 범위 = m_xlApp.Range [worksheet.Cells [1,1] worksheet.Cells [1 COLUMNNUM];
range.Interior.ColorIndex가 = 15; 회색 // 15 대표
range.Font.Bold = TRUE;
range.Font.Size = 10;
INT의 R = 0;
위한 (R = 0, R <ROWNUM; R ++)
{
대해 INT (I = 0; i가 COLUMNNUM를 <; 내가 ++)
{
오브젝트 OBJ tmpDataTable.Rows = [R] [tmpDataTable.Columns [I]로 .toString ()];
datas [R + 1, i가 = OBJ == 널 '' '' '+는 obj.toString () (트림) // 따옴표 전에는 obj.toString ()에서의 자동 포맷 변환을 방지하기 위해인가?.
}
System.Windows.Forms.Application.DoEvents ();
진행률 표시 줄을 추가 //
}
//Excel.Range fchR = worksheet.get_Range (worksheet.Cells [1,1] worksheet.Cells [ROWNUM + 1 COLUMNNUM]);
Excel.Range fchR = m_xlApp.Range [worksheet.Cells [1,1] worksheet.Cells [ROWNUM + 1 COLUMNNUM];
fchR.Value2 날짜를 =;
worksheet.Columns.EntireColumn.AutoFit (); // 적응 열 폭.
//worksheet.Name = "DD";
//m_xlApp.WindowState = Excel.XlWindowState.xlMaximized;
m_xlApp.Visible = 거짓;
// = worksheet.get_Range (worksheet.Cells [1,1] worksheet.Cells [ROWNUM + 1 COLUMNNUM]);
레인지 = m_xlApp.Range [worksheet.Cells [1,1] worksheet.Cells [ROWNUM + 1 COLUMNNUM];
//range.Interior.ColorIndex = 15; // 15 개 대표 회색
range.Font.Size = 9;
range.RowHeight = 14.25;
range.Borders.LineStyle = 1;
range.HorizontalAlignment = 1;
= 사실 workbook.Saved;
workbook.SaveCopyAs (여기서 filePath);
}
캐치 (예외 예)
{
MessageBox.Show ( "수출 예외 :"+ ex.Message, "이상 수출", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
최종적으로
{
) (포트 변경;
}
m_xlApp.Workbooks.Close ();
m_xlApp.Workbooks.Application.Quit ();
m_xlApp.Application.Quit ();
m_xlApp.Quit ();
MessageBox.Show ( "수출 성공!", "메시지", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
개인 무효 EndReport ()
{
누락 된 개체 = System.Reflection.Missing.Value;
시험
{
//m_xlApp.Workbooks.Close ();
//m_xlApp.Workbooks.Application.Quit ();
//m_xlApp.Application.Quit ();
//m_xlApp.Quit ();
}
캐치 {}
최종적으로
{
시험
{
System.Runtime.InteropServices.Marshal.ReleaseComObject (m_xlApp.Workbooks);
System.Runtime.InteropServices.Marshal.ReleaseComObject (m_xlApp.Application);
System.Runtime.InteropServices.Marshal.ReleaseComObject (m_xlApp);
m_xlApp = NULL;
}
캐치 {}
시험
{
// 쓰레기 처리
this.killProcessThread ();
}
캐치 {}
GC.Collect를 ();
}
}
개인 무효 killProcessThread ()
{
ArrayList를 myProcess = 새로운 ArrayList를 ();
대해 INT (I = 0; I <myProcess.Count; 내가 ++)
{
시험
{
. System.Diagnostics.Process.GetProcessById (int.Parse ((문자열) myProcess [I])) 연속 ();
}
캐치 {}
}
}
}