| ♥ 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 |
