I-NOZex Posted June 19, 2012 at 08:54 AM Report Share #463927 Posted June 19, 2012 at 08:54 AM 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 at 04:17 PM Report Share #464120 Posted June 19, 2012 at 04:17 PM 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 at 08:48 AM Author Report Share #464528 Posted June 21, 2012 at 08:48 AM 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 at 03:25 PM Author Report Share #464623 Posted June 21, 2012 at 03:25 PM 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