2014. 10. 15. 17:19


컬럼(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 인 경우, 시트 없는 빈 엑셀 파일이 생성되므로 주의한다.






Posted by 해비