Excelhelper

// 시스템을 사용하여;
// 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])) 연속 ();

}

캐치 {}

}

}

}

추천

출처www.cnblogs.com/LiZhongZhongY/p/11468386.html