Excel: convertire il nome di una cella in indici di colonna e riga

Quando si utilizza Microsoft Excel per manipalore i valori delle celle da codice managed può essere conveniente accedere ai valori contenuti nelle celle attraverso indici colonna/riga invece dei classici lettera e numero (A1, AB52, etc).
Ecco quindi una funzione di utilità per convertire da notazione Excel-like a indici colonna e riga:

protected static int[] ConvertCellNameToColumnRow(string cellName)
{
   int maxIntLetter = 26; // ABCD...K...WXYZ
   int asciiLetterA = 65;
   int maxColumnIndex = 255;
   string row = "";
   string col = "";
   char[] arr = cellName.ToCharArray();

   // separo la parte letterale e numerica dal nome della cella
   for (int i = 0; i < arr.Length; i++)
   {
      if (!Char.IsLetter(arr[i]))
      {
         row = cellName.Substring(i, arr.Length - i);
         col = cellName.Substring(0, i);
         break;
      }
   }
   
   // calcolo il numero della riga
   int rowIndex = 0;
   CharEnumerator enumerator = row.GetEnumerator();
   while (enumerator.MoveNext())
   {
      char number = enumerator.Current;
      if (!Char.IsDigit(number))
      {
         throw new ApplicationException("Nome cella non valido");
      }
   }
    
   // in excel l'indice delle righe comincia da zero
   rowIndex = Convert.ToInt32(row) - 1;

   // calcolo il numero della colonna
   int colIndex = 0;
   foreach (char c in col.ToCharArray())
   {
       colIndex += (((colIndex * (maxIntLetter - 1)) + (int)c) - asciiLetterA) + 1;
   }
   colIndex--; // in excel l'indice delle righe comincia da zero
   if (!(colIndex > 0 && colIndex <= maxColumnIndex))
   {
      // Il numero massimo di colonne in Excel è 256
      throw new ApplicationException("Nome cella non valido");
   }

   return new int[] { colIndex, rowIndex };
}

ASP.NET MVC Framework

In casa Redmond questo è un periodo ricco di novità, e non solo per l'ultimo giorno di Bill Gates, Scott Guthrie in un suo recente post ha annunciato il rilascio in versione Community Technology Preview di nuove funzionalità per ASP.NET e .NET 3.5 con il nome di ASP.NET 3.5 Extensions. Tra le novità più attese introdotte da questa preview c'è il framework MVC (Model View Controller) per lo sviluppo di applicazioni web con ASP.NET.

Ecco alcuni link per approfondire l'argomento:

Infine l'MVCToolkit, una serie di Extension Methods  disegnati per rendere più facile la composizione delle View, per intenderci come fanno i controlli server con le WebForm.


Il primo post

Il perché di questo blog

Ho sempre considerato il sito web un biglietto da visita per chi come me con il web ci vive ed il blog è lo strumento ideale non solo per dimostrare sul campo la propria esperienza, ma anche per confrontare opinioni e perché no ricevere delle critiche che aiutino a crescere e ad approfondire le proprie conoscenze.

Di cosa parliamo?

L'enorme quantità di informazioni presenti in internet e la velocità con cui crescono tende a disorientare e con il tempo sempre tiranno bisogna scegliere con cura cosa approfondire. Questo blog conterrà l'essenza di quello che raccoglierò dalla rete, e poi articoli, riferimenti, recensioni, demo e opinioni sulla programmazione e non solo.

Alcuni argomenti:
Patterns, Domain-Driven Design, Test-Driven Development, framework open source come Castle Project o Spring.NET e tool come NHibernate, NAnt e CruiseControl.NET. Programmazione con C#, VB.NET e altri linguaggi da scoprire come Ruby, Boo, Erlang. Web design, ovvero CSS, Javascript e HTML/XHTML, e altro ancora.

Cosa mi aspetto dal futuro?

Il progetto è ambizioso e l'impegno è di tenerlo vivo con contenuti aggiornati, l'idea è di cominciare con almeno un post a settimana. Mi piacerebbe un giorno rileggere questo post e sentirlo lontano non per il tempo passato, ma per la strada percorsa.

Stay tuned!