델파이 스트링그리드에서 엑셀을 제어할 때 컬럼인덱스를 엑셀컬럼명 으로 변환해야할 경우가 있다.
1 -> A 26 -> Z 27 -> AA 등으로
또는 반대의 경우도 유용하게 사용할 수 있는 함수이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | function TfrmExcelRead.ColIndToAlpha(aInd: integer; aStartIndex: integer = 1): string; var vMulti, vRest: Integer; s: string; begin // 인덱스값을 엑셀 영문컬럼명으로 반환 1->A 또는 0->A, 26->Z 또는 25->Z, 27->AA 또는 26->AA // aStartIndex는 인덱스가 1부터 시작하는지 0부터 시작하는지, 엑셀처럼 0번째 컬럼에 행번호 사용할 경우는 1 s := ''; if aInd >= aStartIndex then begin aInd := aInd - aStartIndex; vMulti := aInd Div 26; vRest := aInd mod 26; //aInd - (vMulti * 26); if (vMulti > 0) Then s := Char(Ord('A') + (vMulti - 1)); //Result + s := s + Char(Ord('A') + vRest); // (A(65) + 나머지) 를 문자로 변경 end; Result := s; end; | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | function TfrmExcelRead.ColAlphaToInd(aAlpha : string; aStartIndex: integer=1) : integer; var i, k : Integer; begin // 영문컬럼명을 숫자 인덱스값으로 반환 A->1 또는 A->0 , Z->26 또는 Z-> 25, AA->27 또는 AA->26 // aStartIndex는 인덱스가 1부터 시작하는지 0부터 시작하는지, 엑셀처럼 0번째 컬럼에 행번호 사용할 경우는 1 k := 0; aAlpha := UpperCase(aAlpha); for i := 1 to Length(aAlpha) do begin k := (k * 26) + (Ord(aAlpha[i]) - Ord('A') + 1); end; Result := k - 1 + aStartIndex; end; | cs |
'델파이' 카테고리의 다른 글
스트링그리드(TStringGrid) 실시간 스크롤 옵션 goThumbTracking 속성 (0) | 2018.04.11 |
---|---|
리치에디트 TRichEdit 라인 수에 따른 자동 높이 조절 및 줌 (0) | 2018.03.22 |
Robocopy 미러링백업 및 cmd batch파일 사용법 (0) | 2018.03.18 |
TDBGrid 행 번갈아 색깔 넣기 row alternate color (0) | 2018.02.15 |
스트링그리드 TStringGird 스크롤관련 가장왼쪽, 가장위쪽 셀 위치 (0) | 2018.02.13 |