Chargement DataGridView dans un fichier Excel

cs_JMO 1850 Messages postés jeudi 23 mai 2002Date d'inscription 11 mai 2018 Dernière intervention - 30 janv. 2016 à 23:06 - Dernière réponse : Whismeril 11625 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 juin 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

5 réponses

Whismeril 11625 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 juin 2018 Dernière intervention - Modifié par Whismeril le 31/01/2016 à 15:41
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 1850 Messages postés jeudi 23 mai 2002Date d'inscription 11 mai 2018 Dernière intervention - 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 !!!
Whismeril 11625 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 juin 2018 Dernière intervention - 31 janv. 2016 à 22:42
Y'en a peut être d'autre ailleurs.

J'ai vu ça
https://www.youtube.com/watch?v=t3BEUP0OTFM
cs_JMO 1850 Messages postés jeudi 23 mai 2002Date d'inscription 11 mai 2018 Dernière intervention > Whismeril 11625 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 juin 2018 Dernière intervention - 1 févr. 2016 à 22:24
Bonsoir Whismeril,

Je viens de tester LinqToExcel, c'est bien mais .... read only.
Demain j'essaierai ExcelLibrary.
Commenter la réponse de Whismeril
Whismeril 11625 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 juin 2018 Dernière intervention - 9 mai 2016 à 22:42
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.