Jeg sidder og leger med noget XML til Excel 2007. Jeg har skrevet en renge formel der kan beregne række nummeret ud fra en bogstavs angivelse fx. ABC = 678, beregnes således : (25^2 * 1) + (25^1 * 2) + (25^0 * 3) = 678
Men hvordan går jeg den anden vej ? altså finder ud af at 678 = (25^2 * 1) + (25^1 * 2) + (25^0 * 3)
Jeg kan nemt bruteforce mig frem til den, men jeg vil hellere vide hvordan man gør det rigtigt.
Kommunerne har digitaliseret indgangen for borgerne. Men bag skærmen håndteres mange arbejdsgange stadig manuelt mellem systemer, mails og organisatoriske siloer.
function ColumnToNumber(Value: string): Integer; var NumIndex: Integer; Ch: Char; iC: Integer; Exponent: Integer; begin Value := AnsiUpperCase(Value); Result := -1; NumIndex := IndexOfNumber(Value);
if NumIndex = 0 then Exit;
Delete(Value, NumIndex, MaxInt);
Result := 0;
while Length(Value) > 0 do begin Ch := Value[1]; iC := (Ord(ch) - 64); Exponent := Length(Value) - 1; Result := Result + Trunc(Power(26, Exponent) * iC); Delete(Value, 1, 1); end; end;
function NumberToColumn(Value: Integer): string; const Base = 26; var I, Rad: Integer; ColValues: array[0..Base - 1] of Char; begin for I := 65 to 65 + Base - 1 do ColValues[I - 65] := char(I);
Result := '';
I := 0;
while Value > 0 do begin Rad := Round(Value / Power(Base, I)) mod Base; Dec(Value, Trunc(Rad * Power(Base, I))); Result := ColValues[Rad - 1] + Result; Inc(I); end; end;
Disse to funktioner er hinandens resiprokke !!
Jens B;
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.