Importar dados de um arquivo Excel é muito simples.
Esse método utiliza a biblioteca Microsoft.Office.Interop.Excel, que é
responsável por manipular arquivo do tipo excel.
Nesse exemplo, independe do número de pasta de trabalho que
tenha o arquivo ele irá percorrer todas as pastas de trabalho.
public void LeArquivo(string
Arquivo)
{
Microsoft.Office.Interop.Excel.Application app = new
Microsoft.Office.Interop.Excel.Application();
//Cria um objeto do tipo WorkBook com todos os elementos do Excel.
Workbook
workBook = app.Workbooks.Open(Arquivo,
Type.Missing,
true, Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing, Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing, Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing);
int
numSheets = workBook.Sheets.Count;
//esse loop vai percorrer todas as pastas de
trabalho do excel.
for (int sheetNum = 1;
sheetNum < numSheets + 1; sheetNum++)
{
Worksheet
sheet = (Worksheet)workBook.Sheets[sheetNum];
int
numColumns = sheet.Columns.Count;
int
numRows = sheet.Rows.Count;
Range excelRange = sheet.UsedRange;
//Pega todo conteúdo de uma linha e transforma
e um array de objetos.
object[,] Linha
= (object[,])excelRange.get_Value(XlRangeValueDataType.xlRangeValueDefault);
List<string[]> Linhas = new
List<string[]>();
int cont_ant = 0;
//Percorre todas as dimensões do array linha
para pegar o conteúdo de cada célula.
for (int i = 1; i <= Linha.GetUpperBound(0); i++)
{
if (i > cont_ant)
{
cont_ant = i;
//pega o total de células
preenchidas na linha e cria um array com o número exato de dimensões.
string[] celulas = new string[Linha.GetUpperBound(1)];
//percorre todas as células
atribuindo preenchendo o array.
for (int j = 1; j <=
Linha.GetUpperBound(1); j++)
{
if (Linha[i, j] != null)
celulas[j - 1] =
Linha[i, j].ToString();
}
Linhas.Add(celulas);
}
}
//Nesse momento o List de string "Linhas" tem
todo conteúdo da pasta de trabalho.
}
workBook.Close();
}
Opa Celson, excelente tópico, eu estou com problemas com relação ao indice de linhas da minha planilha, eu criei um método para minha threading, e estou usando o foreach e datarow por necessidade de melhorias, queria saber como eu poderia pegar o indice da linha, quero pegar a linha 6 a diante. eu cheguei a declarar o int i, e atribui o valor de i = 4, e dentro do meu log eu somei i+1, mas o log me mostra nomes das pessoas nas linhas erradas. Poderia me instruir melhor por gentileza?
ResponderExcluir