델파이
컬럼인덱스 <-> 엑셀의 알파벳컬럼명으로 변환하기
미스터몽키
2018. 3. 22. 01:29
델파이 스트링그리드에서 엑셀을 제어할 때 컬럼인덱스를 엑셀컬럼명 으로 변환해야할 경우가 있다.
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 |