come posso ottenere l'indirizzo della cella da Excel dato un numero di riga e di colonna, ad esempioCome posso ottenere l'indirizzo della cella da Excel
riga 2 e Col 3 dovrebbe restituire C2 ... Please help
come posso ottenere l'indirizzo della cella da Excel dato un numero di riga e di colonna, ad esempioCome posso ottenere l'indirizzo della cella da Excel
riga 2 e Col 3 dovrebbe restituire C2 ... Please help
Non sono un grande utente di VSTO C# - Di solito scelgo VBA. Tuttavia, la seguente coppia di funzioni potrebbe essere utile per te. Incerto se possono essere semplificate ancora un po ':
public string RangeAddress(Excel.Range rng)
{
return rng.get_AddressLocal(false, false, Excel.XlReferenceStyle.xlA1,
missing, missing);
}
public string CellAddress(Excel.Worksheet sht, int row, int col)
{
return RangeAddress(sht.Cells[row, col]);
}
Il RangeAddress
avrà qualsiasi intervallo di Excel e si gettano di nuovo l'indirizzo. Se si desidera lo stile assoluto (con i simboli del dollaro, ad esempio $ C $ 3), è necessario modificare i primi due parametri della chiamata get_AddressLocal su true, true.
Per ottenere l'indirizzo della cella da una coppia riga/colonna, è possibile utilizzare CellAddress
. Ha bisogno di un foglio per ottenere l'indirizzo. Tuttavia, è possibile scambiare in (Excel.Worksheet)ActiveSheet
se non si desidera fornire un foglio (questo potrebbe non funzionare o meno, a seconda di ciò che è stato aperto nella sessione VSTO).
Puoi in qualche modo chiamare le formule o le funzioni native di Excel che duplicano le loro funzionalità? Sarebbe solo
=CELL("address")
public string GetCellAddress(int row, int col) {
return (char)((int)'A' + (row - 1)) + col.ToString();
}
Grazie a Timores ... non è possibile ottenerlo da Excel Interop Object ??? – Sathish
Questa sarebbe la risposta di @ Alastair. – Timores
Questo restituirà il valore errato: la riga 1 colonna 27 restituirà A27 che sarebbe la colonna 1 riga 27. Basta commutare riga e colonna restituirà [1 che è anche sbagliato. Corretto sarebbe AA1. –
Questo (non testato) dovrebbe funzionare anche con gli indirizzi di colonna sopra che sono più di 26:
using System.Text;
public string GetCellAddress(int row, int col) {
StringBuilder sb = new StringBuilder();
col--;
do {
sb.Insert(0, (char)('A' + (col % 26)));
col /= 26;
} while (col > 0);
sb.Append(row);
return sb.ToString();
}
Corretto: l'indirizzo di colonna era indietro
Ciò restituirà BA1 per col 27 anziché AA1. –
Cells (2, 3) .Address
Basta un miglioramento, il col-- era nel posto sbagliato
static string GetCellAddress(int row, int col)
{
StringBuilder sb = new StringBuilder();
do
{
col--;
sb.Insert(0, (char)('A' + (col % 26)));
col /= 26;
} while (col > 0);
sb.Append(row);
return sb.ToString();
}
sto usando indice di riga e di colonna in base zero. Quindi ho dovuto adattare il codice delle risposte precedenti al seguente. Ci sono voluti alcuni tentativi per ottenere questo diritto per tutti gli indirizzi possibili i.E. A1, Z2, AA2, ZZ10, ...
public string GetAddress(int col, int row)
{
col++;
StringBuilder sb = new StringBuilder();
do
{
col--;
sb.Insert(0, (char)('A' + (col % 26)));
col /= 26;
} while (col > 0);
sb.Append(row + 1);
return sb.ToString();
}
Vedi anche: http://stackoverflow.com/questions/181596/how-to-convert-a-column-number-eg-127-into- an-excel-column-eg-aa – Graham