Chargement DataGridView dans un fichier Excel

Signaler
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
-
Messages postés
14872
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 octobre 2020
-
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

2 réponses

Messages postés
14872
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 octobre 2020
446
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
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
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 !!!
Messages postés
14872
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 octobre 2020
446
Y'en a peut être d'autre ailleurs.

J'ai vu ça
https://www.youtube.com/watch?v=t3BEUP0OTFM
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26 >
Messages postés
14872
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 octobre 2020

Bonsoir Whismeril,

Je viens de tester LinqToExcel, c'est bien mais .... read only.
Demain j'essaierai ExcelLibrary.
Messages postés
14872
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 octobre 2020
446