♥ 0 | Boa noite, Fiz um formulário de utilizador para importar dados de um ficheiro de excel para uma gridview. Estou a ter um erro no seguinte: OleDbConnection myConnection = new OleDbConnection(@”Provider=Microsoft.ACE.OLEDB.12.0;Data Source='” + file + “‘;Extended Properties=\”Excel 12.0;HDR=YES;\””); O programa corre bem até preencher o Dataset. Acredito que esteja a faltar alguma referência. No Visual Studio a referência que utilizo é using System.Data.OleDb; mas no primavera V10 não estou a conseguir correr Alguém tem alguma ideia? Marked as spam |
Private answer Olá @nunodomingues, Para evitar problemas de drivers a afins eu uso referência ao OfficeOpenXml - EPPlus.dll (https://epplussoftware.com/docs/5.8/api/OfficeOpenXml.html). Podes utilizar o método abaixo para transformar em datatable, que servirá de source para o teu fim.
public static DataTable GetDataTableFromExcel(string path, string sheet, bool hasHeader = true) { DataTable tbl = new DataTable(); try { byte[] bin = File.ReadAllBytes(path); using (MemoryStream stream = new MemoryStream(bin)) using (ExcelPackage excelPackage = new ExcelPackage(stream)) { ExcelWorksheet ws = null; ws = excelPackage.Workbook.Worksheets[sheet]; if (ws == null) { throw new Exception("A folha não existe no ficheiro carregado"); } foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column]) { // tbl.Columns.Add(hasHeader ? firstRowCell.Text : string.Format("Coluna{0}", firstRowCell.Start.Column)); tbl.Columns.Add(string.Format("Coluna{0}", firstRowCell.Start.Column)); } var startRow = hasHeader ? 2 : 1; for (int rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++) { var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column]; DataRow row = tbl.Rows.Add(); foreach (var cell in wsRow) { row[cell.Start.Column - 1] = cell.Text; } } } return tbl; } catch (Exception ex) { throw new Exception(ex.Message.ToString()); } }
Marked as spam Comments Obrigado Nuno. Deste-me uma excelente ideia. Funcionou perfeitamente. Maravilha. | |
Private answer Boas @nunodomingues
Se estas a utilizar o oledb 12, verifique o aplicativo microsoft access database engine. Normalmente o windows service instala a versão 32 e 64 bit deste aplicativo. O que tens de fazer é garantir que apenas esteja instalado o 32 bit.(Alguns casos apenas o 64 bits) Eu já tive este erro e continuo a ter quando o windows service decide que deve instalar estas duas versões que por engraçado, se tentares instar as duas versões manualmente o windows não permite. Marked as spam Comments Boa tarde, Obrigado pela dica.
No entanto seguindo o concelho do Nuno acima, acabei por concluir que a melhor forma é usar uma referência externa e depois ao instalar o projecto instalo também a dependência. É muito mais fácil e fiável do que estarmos a depender do que está instalado no computador. Cumprimentos |