Das Spreadsheet Beispiel von Qt4 ist leider nur sehr rudimentär und im Netz gibt es zwar eine Hand voll Algorithmen, aber fast alle haben Sie Einschränkungen. So sind bspw. die Spaltenzahlen limitiert, Spaltennamen auf 2 oder 3 Buchstaben limitiert o.ä. Meine Routine sollte unlimitiert sein und auch mit anderen Alphabeten (mehr oder weniger Buchstaben) zurecht kommen. Später soll z.B. auch die arabische Zeichenmenge benutzt werden können. Da es sicher hin und wieder jmd. geben wird, der via Google sowas sucht, poste ich es mal hier. Eventuelle Fehler bitte wie üblich an mich mailen. Lizenz ist GPL, aber auch kommerzielle Projekte können den Code auf Anfrage benutzen.
Code: Alles auswählen
QString CellTableView::encodeColumnName(int col)
{
QString result;
unsigned int chars = 26;
unsigned int mod;
if (col > 32000)
qWarning() << "CellTableView::encodeColumnName(col): col > 32000 may cause problems.";
while (col > 0) {
mod = (col - 1) % chars;
col = (col - mod) / chars;
result = QString(mod + 'A') + result;
}
return result;
}
int CellTableView::decodeColumnName(const QString &name)
{
int value = 0;
int pos = name.size();
unsigned int help = 1;
unsigned int chars = 26;
QString str = name.toUpper();
while (pos > 0) {
value += ((str.at(--pos).toLatin1() - 'A') + 1) * help;
help *= chars;
}
return value;
}
Viele Grüße,
E*