Ler arquivo do Excel em C #

O .NET 4+ permite que C # leia e manipule arquivos do Microsoft Excel, para computadores que têm o Excel instalado (se você não tiver o Excel instalado, consulte NPOI ).

Primeiro, adicione a referência à Biblioteca de Objetos do Microsoft Excel XX.X , localizada na guia COM do Gerenciador de Referências. Eu dei a isso o alias de uso do Excel.

using Excel = Microsoft.Office.Interop.Excel;       //Microsoft Excel 14 object in references-> COM tab

Em seguida, você precisará criar referências para cada objeto COM que é acessado. Cada referência deve ser mantida para sair efetivamente do aplicativo na conclusão.

//Create COM Objects. Create a COM object for everything that is referenced
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"sandbox_test.xlsx");
Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
Excel.Range xlRange = xlWorksheet.UsedRange;

Então você pode ler a planilha, tendo em mente que a indexação no Excel não é baseada em 0. Isso apenas lê as células e as imprime de volta como estavam no arquivo.

//iterate over the rows and columns and print to the console as it appears in the file
//excel is not zero based!!
for (int i = 1; i <= rowCount; i++)
{
for (int j = 1; j <= colCount; j++)
{
//new line
if (j == 1)
Console.Write("rn");

//write the value to the console
if (xlRange.Cells[i, j] != null && xlRange.Cells[i, j].Value2 != null)
Console.Write(xlRange.Cells[i, j].Value2.ToString() + "t");

//add useful things here!
}
}

Por último, as referências à memória não gerenciada devem ser liberadas. Se isso não for feito corretamente, haverá processos remanescentes que manterão as gravações de acesso ao arquivo em sua pasta de trabalho do Excel.

//cleanup
GC
.Collect();
GC
.WaitForPendingFinalizers();

//rule of thumb for releasing com objects:
// never use two dots, all COM objects must be referenced and released individually
// ex: [somthing].[something].[something] is bad

//release com objects to fully kill excel process from running in the background
Marshal.ReleaseComObject(xlRange);
Marshal.ReleaseComObject(xlWorksheet);

//close and release
xlWorkbook
.Close();
Marshal.ReleaseComObject(xlWorkbook);

//quit and release
xlApp
.Quit();
Marshal.ReleaseComObject(xlApp);

Leitura adicional:

StackOverflow

Interop Marshaling

Excel e C #

Código Completo:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using Excel = Microsoft.Office.Interop.Excel; //microsoft Excel 14 object in references-> COM tab

namespace Sandbox
{
public class Read_From_Excel
{
public static void getExcelFile()
{

//Create COM Objects. Create a COM object for everything that is referenced
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"C:UsersE56626DesktopTeddyVS2012Sandboxsandbox_test - Copy - Copy.xlsx");
Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
Excel.Range xlRange = xlWorksheet.UsedRange;

int rowCount = xlRange.Rows.Count;
int colCount = xlRange.Columns.Count;

//iterate over the rows and columns and print to the console as it appears in the file
//excel is not zero based!!
for (int i = 1; i <= rowCount; i++)
{
for (int j = 1; j <= colCount; j++)
{
//new line
if (j == 1)
Console.Write("rn");

//write the value to the console
if (xlRange.Cells[i, j] != null && xlRange.Cells[i, j].Value2 != null)
Console.Write(xlRange.Cells[i, j].Value2.ToString() + "t");
}
}

//cleanup
GC
.Collect();
GC
.WaitForPendingFinalizers();

//rule of thumb for releasing com objects:
// never use two dots, all COM objects must be referenced and released individually
// ex: [somthing].[something].[something] is bad

//release com objects to fully kill excel process from running in the background
Marshal.ReleaseComObject(xlRange);
Marshal.ReleaseComObject(xlWorksheet);

//close and release
xlWorkbook
.Close();
Marshal.ReleaseComObject(xlWorkbook);

//quit and release
xlApp
.Quit();
Marshal.ReleaseComObject(xlApp);
}
}
}