Chargement DataGridView dans un fichier Excel

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - Modifié par cs_JMO le 30/01/2016 à 23:12
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 - 9 mai 2016 à 22:42
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

Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
Modifié par Whismeril le 31/01/2016 à 15:41
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
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
31 janv. 2016 à 21:16
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 !!!
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
31 janv. 2016 à 22:42
Y'en a peut être d'autre ailleurs.

J'ai vu ça
https://www.youtube.com/watch?v=t3BEUP0OTFM
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27 > Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024
1 févr. 2016 à 22:24
Bonsoir Whismeril,

Je viens de tester LinqToExcel, c'est bien mais .... read only.
Demain j'essaierai ExcelLibrary.
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
9 mai 2016 à 22:42
0
Rejoignez-nous