I-NOZex Posted June 19, 2012 Report Share Posted June 19, 2012 Bom dia. Estou com um problema com uma aplicação em C# que estou a desenvolver, em que consiste basicamente em comparar 2 ficheiros excel. Até aqui tudo bem, a ligação está correcta e funciona tudo bem (a parte da comparação ainda não desenvolvi) a excepção de que um dos ficheiros a comparar tem quase 100mb de tamanho, o que leva a um consumo de memória superior a 700MB cada vez que tenho de extrair informações dele. O código que estou a usar para a ligação está assim: private void carregarDocumento2ToolStripMenuItem_Click(object sender, EventArgs e) { load_file.Title = "Carregar Documento 2"; load_file.ShowDialog(); if (load_file.CheckFileExists) { string connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", load_file.FileName); string Sheet1 = "Folha1"; int i = 0; using (OleDbConnection conn = new OleDbConnection(connectionString)) { conn.Open(); DataTable dbSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); if (dbSchema != null && dbSchema.Rows.Count > 0) { DataRowCollection sheets = dbSchema.Rows; while (Convert.ToString(sheets[i]["TABLE_NAME"]).Contains("_xlnm._?")) { i++; } Sheet1 = Convert.ToString(dbSchema.Rows[i]["TABLE_NAME"]); } } string query = String.Format("select * from [{0}]", Sheet1); OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString); DataSet dataSet = new DataSet(); dataAdapter.Fill(dataSet); dtgrid2.DataSource = dataSet.Tables[0]; } } O while que aí se encontra serve para percorrer o documento Excel até encontrar a 1a página (pois nem sempre a 1a posição da array é a primeira página, por vezes são "páginas" ocultas que o Excel cria, algo como "_xlnm._FilterDatabase$" por exemplo). Tenho um ficheiro com 500 e poucos KB e funciona na perfeição, com o outro é que se dá o problema. Tenho que usar esse método para fazer a ligação, a menos que não haja de resto outra opção de como o fazer... Lembrei-me se usando threads não conseguiria resolver em parte o problema? Se sim podem fornecer algum código de exemplo, ou fontes? Digamos que comecei a programar C# ontem e em problemas mais específicos nado um bocado xD Obrigado a quem me possa ajudar 😉 B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net Link to comment Share on other sites More sharing options...
edmolko Posted June 19, 2012 Report Share Posted June 19, 2012 Para ler informação de ficheiros .xls de uma forma muito rápida existe uma DLL porreira: http://code.google.com/p/excellibrary/ Link to comment Share on other sites More sharing options...
I-NOZex Posted June 21, 2012 Author Report Share Posted June 21, 2012 Para ler informação de ficheiros .xls de uma forma muito rápida existe uma DLL porreira: http://code.google.com/p/excellibrary/ os ficheiros sao xlsx :/ B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net Link to comment Share on other sites More sharing options...
I-NOZex Posted June 21, 2012 Author Report Share Posted June 21, 2012 pelo que vi nos foruns de suporte a programadores da microsoft, usar OPEN XML é o mais recomendado, e ainda mais para grandes ficheiros, é mais rapido e come menos recursos... o problema é que nao encontro nada explicito de como fazer a ligaçao e espetar aquilo numa datatable ou logo pra datagrid :/ alguem sabe de algum exemplo de codigo, ou uns links que possa arrnjar sfv? tenho alguma urgencia... o programa ta ok e totalmente funcional excepto este pequeno (grande) problema... :x B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now