Função para retornar Célula do Excel – C#
Hoje vou passar para vocês uma função que converte uma determinada linha/coluna em uma célula do excel. Isso pode ser necessário quando manipulamos planilhas do excel.
Você não gostou da qualidade deste conteúdo?
(opcional) Você gostaria de comentar o que não lhe agradou?
Olá pessoal, trabalhando na exportação de uma planilha para o excel me deparei com a necessidade de gerar o relatório com fórmulas, sendo que estas fórmulas iriam variar de acordo com os dados do relatório. Me vi então diante da necessidade de converter uma determinada linha/coluna em uma célula do excel, visto que o número de colunas era dinâmico, chegando facilmente na casa de dezenas. Por exemplo, coluna 30 equivale a coluna AD do excel.
Diante disso criei uma classe com duas funções para atender a esta necessidade, classe esta que venho compartilhar com vocês:
public class ExcelUtil
{
//Array com as letras das colunas
public static String[] letras = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
"N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
//Função que retornar a letra da coluna pelo índice
public static String GetColumnLetterByIndex(Int32 col){
String celula = "";
//Aqui verificamos se a coluna passada é maior do que 26//pois 26 equivale a ultima letra do excel, "Z"
//a partir daí começamos a ter duas letras... AA, AB, AC, AD...
if (col > 26)
{
//Aqui pegamos o valor absoluto do resultado da divisão do numero da coluna por 26
//Este é o indice da primeira letra de nossa coluna
//Ex.: Col = 50 -> 50/26 = 1,92
// idxPrimeiraLetra = 1
Int32 idxPrimeiraLetra = Math.Abs(col / 26);
//Para buscarmos o segundo índice, precisamos de um cálculo diferente//Devemos pegar a diferença entre o indice da coluna a ser localizada
//e resultado da multiplicacao do indice da primeira letra por 26
//Ex.: idxSegundaLetra = 50 - (1 * 26)
// idxSegundaLetra = 24
Int32 idxSegundaLetra = col - (Math.Abs(col / 26) * 26);
//Aqui verificamos se o indice da segunda letra é zero//isto acontecerá quando a coluna localizada for multiplo de 26, neste caso precisamos
//considerar a ultima letra, sendo esta o índice 25 de nosso array
//Caso contrário, retornamos concatenado de acordo com nosso array
//as letras do indice da primeira e segunda letras respectivamente
//Ex.: idxPrimeiraLetra = 1
// idxSegundaLetra = 24
// celula = AX
if (idxSegundaLetra == 0)
celula = String.Concat(letras[idxPrimeiraLetra - 2], letras[25]);
else
celula = String.Concat(letras[idxPrimeiraLetra - 1], letras[idxSegundaLetra - 1]);
}else//Se for menor que 26, não há calculos a fazer, basta localizarmos no array
celula = letras[col - 1];
return celula;}
//Função que retorna a célula pelo indice da coluna e número da linhapublic static String GetCelulaByColumnIndex(Int32 col, Int32 row){
//buscamos a letra referente a coluna
String celula = GetColumnLetterByIndex(col);
//concatenamos com a linha passada no parâmetroreturn String.Concat(celula, row.ToString());
}
}
É isso aí
pessoal, vou ficando por aqui,
Fiquem a vontade para dar
feedback, críticas e sugestões de novos temas para os próximos artigos.
Um abraço.
Ricardo Coelho.
http://www.agilexp.blogspot.com/
Ricardo Da Silva Coelho
Graduado em Analise de Sistemas, Pós-graduando em Engenharia de software, mais de 7 anos de experiência em desenvolvimento de software, onde atuou em projetos de diversos seguimentos como varejo, telecomunicações, ERPs etc e nas mais variadas plataformas(Desktop, Web e Mobile). Articulista do portal...
4 COMENTÁRIOS
Obrigado!
Esta função não retorna um objeto do tipo "Célula do Excel", ele retorna o nome da célula a partir de seu indice.
Ou seja, se quero a coluna 3, entao a funcao vai retornar "C" e assim sucessivamente.
Escrevi três posts sobre exportação para o excel:
http://www.devmedia.com.br/post-18115-Exportacao-para-o-Excel-em--Net-Formatando-celulas.html
http://www.devmedia.com.br/post-18114-Exportacao-para-o-Excel-em--Net-Realizando-uma-exportacao-simples.html
http://www.devmedia.com.br/post-18113-Exportacao-para-o-Excel-em--Net-Introducao.html
Neles falo sobre interação da aplicação com planilhas do excel e respondendo a sua pergunta, Sim, precisa do excel instalado poisa biblioteca do .net fará uso do excel para realizar a exportação dos dados. E o excel precisa estar instalado onde a aplicação estiver sendo executada.
Att
Ricardo Coelho.
Achei interessante o que tu colocou pra nos, eu gostaria de saber se tu pode me ajudar!
Eu tenho que exportar uma StringGrid (Delphi 7) para uma planilha do Excel, eu ate consegui, so que criei uma Tstringlist e ela coloca somente em uma coluna e gostaria de criar mais colunas tipo
COLUNAS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
L| 1
I| 2
N| 3
H| 4
A| 5
S| 6
Obrigado
Pelo que entendi você quer exportar os dados de um StringGrid para o excel mas só está conseguindo exportar uma única coluna do seu StringGrid.
Neste caso você vai ter que fazer dois loops, um para as linhas e outro para as colunas. Por exemplo:
for i := 1 SuaStringGrid.RowCount do
begin
for j := 1 to SuaStringGrid.ColCount do
begin
//ROTINA PARA EXPORTAR NA CELULA DO EXCEL PODENDO
//USAR O IDENTIFICADOR DA CELULA(A1,A2,A3 etc...)
//com o método GetCelulaByColumnIndex(j, i).
end;
end;
Ahhh, já ia esquecendo, feliz natal amigo.
P.S.: E eu que achei que era o único louco a estar programando às véspera do natal rsrs.




