컬럼(Column) 잠그기
this.fpSpread1_Sheet1.Columns.Get(0).Locked = true; this.fpSpread1_Sheet1.Columns.Get(1).Locked = true; this.fpSpread1_Sheet1.Columns.Get(2).Locked = true; |
컬럼(Column) 정렬기능 추가
1 | this.fpSpread1.ActiveSheet.SetColumnAllowAutoSort(-1, true);
|
2 | this.fpSpread1.Sheets[0].Columns[1].AllowAutoSort = true; |
- Column 헤더 클릭 시 해당 Column 기준으로 데이터를 정렬하여 표시 해 준다.
- [1] 또는 [2] 중 한가지를 선택 적용한다.
현재 선택한 Row 색칠하기(잠겨진 셀 포함)
//잠긴 셀에 지정된 색상 해제 fpSpread1.ActiveSheet.LockBackColor = Color.Empty;
//기존에 칠된것 모두 제거 for(int i=0; i<fpSpread1.ActiveSheet.Rows.Count; i++) { fpSpread1.ActiveSheet.Rows[i].BackColor = Color.Empty; }
//새로 색칠 fpSpread1.ActiveSheet.Rows[iCurRow].BackColor = Color.FromArgb(255, 255, 0);
|
- RGB색상은 마음에 드는 색상으로 설정한다.
싱글 선택만 되도록
this.fpSpread1_Sheet1.SelectionPolicy = FarPoint.Win.Spread.Model.SelectionPolicy.Single;
|
- 디자이너 화면에서 설정 가능하다.
셀 한번 클릭 시 이벤트
private void fpSpread1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) {
} |
- CellClick 이벤트는 이전 클릭된 것을 바라보는 문제가 있고, SelectionChange 이벤트는 1개뿐이 없을 때 다시 선택해도 이벤트 발생이 되지 않는 문제가 있다.(이건 당연하지만...)
- DoubleClick 이벤트는 말 그대로 두번 클릭질 해야 하는데 역시 불편하다. 두번클릭보단 한번클릭이 아무래도 더 편하니까~~
혹시 다른 또는 더 좋은 방법 있으면 한 수 가르침 부탁드립니다.
컬럼 헤더 셋팅 예제코드
fpSpread1.Sheets[0].ColumnHeader.Cells[0, 0].Text = "코드"; fpSpread1.Sheets[0].Columns[0].Width = 60; fpSpread1.Sheets[0].ColumnHeader.Cells[0, 1].Text = "내용"; fpSpread1.Sheets[0].Columns[1].Width = 60; fpSpread1.Sheets[0].ColumnHeader.Cells[0, 2].Text = "설명"; fpSpread1.Sheets[0].Columns[2].Width = 250;
|
- 컬럼 헤더 타이틀, 컬럼의 가로길이 설정 예.
멀티라인 텍스트 데이터 가져오기
private DataTable _rtnDT; // 전역변수 선언
// 스프레드에 데이터 바인딩
_rtnDT = _controller.getData(); fpSpread1.DataSource = _rtnDT;
// 스프레드 내용 참조 시 iRow = fpSpread1.ActiveSheet.ActiveRowIndex;
txtProhAbbr.Text = _rtnDT.Rows[iRow][0].ToString(); txtProhMemo.Text = _rtnDT.Rows[iRow][1].ToString();
|
- fpSpread의 [row,col].Text 로는 멀티라인 데이터를 텍스트 박스에 연결 시 한줄로 출력되는 문제가 있어 해당 Row번호만 알아낸 다음 DataTable에서 직접 가져온다.
혹시 다른 또는 더 좋은 방법 있으면 한 수 가르침 부탁드립니다.
셀 병합
fpSpread1.Sheets[0].AddSpanCell(0, 0, 2, 1); |
- 인자 4개를 넘겨줘야하는데 앞 2개 인자는 병합 시작 셀의 row, col 값 이고, 뒤에 2개 인자는 병합할 row 수, 병합할 col 수 이다.
- 위 예제를 본다면 0,0 으로 부터 2개 Row, 1개 Col 병합 이므로 아래와 같이 될 것이다.
0,0 좌표로 부터 2개 Row 병합된 상태, Col 은 1 이었으므로 병합되지 않는다. 만약 Col 도 2 였다면, 2 x 2 셀 모두 합쳐 진다.
엑셀 내보내기
// 스프레드에 내보낼 정보 적재 fpSpread1.DataSource = rtnDS.Tables[0];
// 컬럼길이 조정 fpSpread1.Sheets[0].Columns[0].Width = 70; // 사번 fpSpread1.Sheets[0].Columns[1].Width = 70; // 성명 fpSpread1.Sheets[0].Columns[2].Width = 50; // 삭제
// 파일저장 다이얼로그 확장자 필터 설정 savedlg.Filter = "Excel files (*.xls)|*.xls|All files (*.*)|*.*"; savedlg.FilterIndex = 1;
if (savedlg.ShowDialog() == DialogResult.OK) { // 스프레드의 내용을 엑셀파일로 저장 fpSpread1.SaveExcel(savedlg.FileName, FarPoint.Win.Spread.Model.IncludeHeaders.ColumnHeadersCustomOnly);
MessageBox.Show("저장이 완료 되었습니다.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); }
|
- SaveFileDialog 컨트롤 을 호출하여 저장할 위치, 파일명을 입력받고, 스프레드의 내용을 해당 위치에 내보낸다.
- 스프레드 속성 중 Visible = false 인 경우, 시트 없는 빈 엑셀 파일이 생성되므로 주의한다.