Chargement DataGridView dans un fichier Excel

Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
-
Bonsoir le forum,

J'effectue séquentiellement les étapes suivantes :
- Chargement d'une collection dans un datagridview;
- Chargement du datagridview dans un onglet d'un fichier Excel;
- Mise en forme (présentation) de ce fichier Excel.

Etape 1 :
''check log : 30/01/2016 22:09:32 début load collection ListOf dans datagridview
datagridviewlines.DataSource = ListOfJob
''check log : 30/01/2016 22:09:35 fin load collection ListOf dans datagridview

Etape 2 :
''check log : 30/01/2016 22:09:38 début load datagridview dans excel
Dim xlApp As Excel.Application = New Microsoft.Office.Interop.Excel.Application()
Dim xlWorkBook As Excel.Workbook
Dim xlWorkSheet As Excel.Worksheet

xlWorkBook = xlApp.Workbooks.Open(newfilePDP)
xlApp.DisplayAlerts = False
xlWorkSheet = CType(xlWorkBook.Worksheets("Plan_Production"), Excel.Worksheet)

For Each col As DataGridViewColumn In datagridviewlines.Columns
xlWorkSheet.Cells(1, col.Index + 1) = col.HeaderText
For Each row As DataGridViewRow In datagridviewlines.Rows
xlWorkSheet.Cells(row.Index + 2, col.Index + 1) = row.Cells(col.Index).Value
Next
Next
''check log : 30/01/2016 22:10:34 fin load datagridview dans excel

Etape 3 :
''check log : 30/01/2016 22:10:34 début mise en forme du fichier excel
Dim LastRow As Long = 0
Dim LastCol As Long = 0

With xlApp
.Visible = False
.DisplayAlerts = False
With xlWorkSheet
.AutoFilterMode = False
LastRow = .Range("A" & .Rows.Count).End(Excel.XlDirection.xlUp).Row
LastCol = xlWorkSheet.UsedRange.Columns.Count()
With .Range(.Cells(1, 1), .Cells(LastRow, LastCol)).Borders
.LineStyle = 1 ' (valeur de xlContinuous)
.Weight = 2 ' (valeur de xlThin)
.ColorIndex = 0 ' (valeur du noir)
End With
End With
End With

xlApp.ReferenceStyle = Excel.XlReferenceStyle.xlA1
xlApp.ActiveWindow.SplitColumn = 1
xlApp.ActiveWindow.SplitRow = 1
xlApp.ActiveWindow.FreezePanes = True
xlWorkSheet.Range("A1:BA1").AutoFilter(Field:=1, Operator:=Excel.XlAutoFilterOperator.xlFilterValues)
xlWorkSheet.UsedRange.Columns.EntireColumn.AutoFit()
xlWorkSheet.UsedRange.RowHeight = 15
xlWorkSheet.Range("C1").Select()

' Sauvegarde et fermeture du fichier Plan_Production
xlWorkBook.SaveAs(newfilePDP)
xlWorkBook.Close()
xlApp.DisplayAlerts = True
xlApp.Quit()
xlWorkSheet = Nothing
xlWorkBook = Nothing
xlApp = Nothing
''check log : 30/01/2016 22:10:35 fin mise en forme du fichier excel


Visiblement, mon étape 2 (Load datagridview dans excel) n'est pas performante.
Quelle autre méthode à utiliser pouvez-vous me conseiller ?

Merci de vos suggestions,
jean-marc
Afficher la suite 

Votre réponse

2 réponses

Messages postés
12410
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 décembre 2018
0
Merci
Bonjour JM,

c'est le même concept qu'avec Word, utiliser l'API est couteux en temps, travailler sur le xlsx directement est bien plus performant.

Il existe sur CodePlex
un package pour xlxs, que je n'ai pas encore eu l'occasion de tester.
Alors, oui je sais ton boulot les bloque, alors je l'ai mis , le lien est valable 4 jours.

Quand j'étais petit, la mer Morte n'était que malade.
George Burns
cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
-
Bonsoir Whismeril,

Merci pour le lien.
J'ai récupéré la librairie et fait des tests.
Hélas, on ne peut que créer un fichier xlsx.
Il n'y a pas la possibilité d'ouvrir un fichier existant et de modifier un onglet.
Dommage !!!
Whismeril
Messages postés
12410
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 décembre 2018
-
Y'en a peut être d'autre ailleurs.

J'ai vu ça
https://www.youtube.com/watch?v=t3BEUP0OTFM
cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
> Whismeril
Messages postés
12410
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 décembre 2018
-
Bonsoir Whismeril,

Je viens de tester LinqToExcel, c'est bien mais .... read only.
Demain j'essaierai ExcelLibrary.
Commenter la réponse de Whismeril
Messages postés
12410
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 décembre 2018
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.