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); }
4 comentários:
não te esqueças isso que abre um processo de Excel, igual em tudo a abrir a aplicação Excel num desktop. Isso num servidor pode ser overkill, a solução mais escalável e by-the-book é mesmo utilizar uma conexão oledb ou equivalente.
Tens toda a razão, eu não dei todo o meu contexto. O meu cenário é de inicialização de dados, imagina que são valores por omissão que vais receber como requisitos da tua aplicação, e já que recebo vários ficheiros xls com o mesmo formato aproveito para me poupar trabalho e crio um processo automático em vez de andar a copiar os dados um por um, o que era de todo impensável. Isto é feito uma única vez, ficando os dados armazenados na base de dados.
Olá...
Você determinou a leitura de A1 a A3. Tem como eu fazer um loop dinâmico, por exemplo, até onde a planilha tem dados? Obrigado.
Sugiro que vejas um post mais recente que fiz sobre o assunto.
Nos meus loops o que faço é verificar se a linha corrente tem dados, se não tiver assumo que a restante folha está vazia. Mas esta condição de paragem depende totalmente do modelo que tiveres no excel, se permitires linhas vazias vais ter de encontrar outra condição de paragem. Na pior das hipóteses tens de ler até ao fim do excel.
Enviar um comentário