Após muito procurar pela
internet como fazer uma simples leitura dos dados num ficheiro excel, cheguei a uma solução que considero fácil de perceber. As soluções que encontrei passavam sempre por abrir uma conecção OleDb que eu queria evitar por achar que não deveria ser preciso tanto, achava (e bem) que conseguia através de objectos/métodos recolher a informação de determinadas células.
O primeiro coisa a fazer é adicional uma referência para a dll de COM com o nome "Microsoft Excel 11.0 Object Library". Depois, e ainda não percebi porquê, é necessário que os
regional settings da máquina estejam iguais aos do Excel, se não levamos com a excepção "
Old format or invalid type library".
O código é tão simples como o seguinte:
private static void ReadExcelInfo(string fullFilePath)
{
//Get Excel interop object
Application objExcel = new Application();
//Validate object allocation
if (objExcel == null)
{
return;
}
//Don't show Excel windows
objExcel.Visible = false;
//Open a connection to the excel file
Workbook objWorkbook = objExcel.Workbooks.Open(fullFilePath, 0, true, 5,"", "",
true, XlPlatform.xlWindows, "\t",
false, false, 0, true,null,null);
//Get sheets collection
Sheets sheets = objWorkbook.Worksheets;
//Get first sheet (like others interop objects the start index is 1)
Worksheet objWorkSheet = (Worksheet) sheets.get_Item(1);
//Get cell value from A1 to A3
for (int i = 1; i <= 3; ++i)
{
string data = (string) objWorkSheet.get_Range("A"+i.ToString(), Missing.Value ).Text;
}
//Close the connection
objWorkbook.Close(false,null,null);
}