Corbel88
Messages postés10Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention 8 janvier 2009
-
30 sept. 2008 à 09:22
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 2012
-
30 sept. 2008 à 13:40
Bonjour,
Je dois ecrire des données sur un fichier excel.
Tout se passe bein mais le temps pour l'écriture est énorme quelqu'un aurais t il une idée?
FNxls = "C:\Inetpub\wwwroot\Schneider\upload\temp\plop12.xls"
App = New Microsoft.Office.Interop.Excel.Application
If File.Exists(FNxls) Then
Kill(FNxls)
End If
'Ouverture de l'application
App = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
Book = App.Workbooks.Add
'Sheet correspond à la première feuille du fichier
Sheet = Book.Worksheets(1)
Dim debut As Integer = 1
For Each dc In tableTemp.Columns
contenuCellule = dc.ToString
With Sheet
'entree les noms de colonne
For iCol = debut To ColMax
.Cells(1, iCol) = contenuCellule
Next
End With
debut = debut + 1
Next
Dim numLigne As Integer = 2
nb = tableTemp.Columns.Count()
Dim nb2 As Int64 = tableTemp.Rows.Count()
For Each dr2 In tableTemp.Rows
debut = 1
i = 0
iCol = 0
For i = 0 To nb - 1 'nb - 2
iCol = iCol + 1
With Sheet
.Cells.NumberFormat = "@"
.Cells(numLigne, iCol) = dr2(i)
'Next
End With
debut = debut + 1
Next
numLigne = numLigne + 1
Next
' Titres en Gras
Sheet.Rows(1).Font.Bold = True
' Select the first cell.
Sheet.Cells(1, 1).Select()
'sauvegarder
Try
App.DisplayAlerts = False
Sheet.SaveAs(FNxls)
Catch ex As Exception
ErrStr "Erreur " & vbCrLf & ex.ToString
GoTo fout
End Try
fout:
App.Workbooks.Close()
App.Quit()
App = Nothing
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 30 sept. 2008 à 11:38
Salut,
Etant en .NET utlises File aussi pour détruire le fichier plutot que Kill (mleme si le résultat devrait etre le meme)
If File.Exists(FNxls) Then File.Delete(FNxls)
Qu'est supposé faire cette boucle?
For Each dc In tableTemp.Columns
contenuCellule = dc.ToString
With Sheet
'entree les noms de colonne
For iCol = debut To ColMax
.Cells(1, iCol) = contenuCellule
Next
End With
debut = debut + 1
Next
, ----
[../code.aspx?ID=41455 By Renfield]
Ce qui m'intrigue surtout c'est
'entree les noms de colonne
For iCol = debut To ColMax
.Cells(1, iCol) = contenuCellule
Next
D'ailleurs que vaut ColMax?
@+: Ju£i€n Pensez: Réponse acceptée
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 30 sept. 2008 à 11:48
Salut,
Essaie peu être ce code.
C'est le tiens mais un peu épurer de ce qui me semble inutile et auquel j'ai ajoute ce que te proposais [../auteur/JMFMARQUES/615490.aspx jmfmarques] (salut) .Mais cela ne doit pas t'empêcher de regarder l'aide en ligne
Dim FNxls As String
Dim App = New Microsoft.Office.Interop.Excel.Application
Dim debut As Integer = 1
FNxls = "C:\Inetpub\wwwroot\Schneider\upload\temp\plop12.xls"
'Supression du fichier si il existe
If File.Exists(FNxls) Then File.Delete (FNxls)
'Ouverture de l'application
App = CreateObject("Excel.Application")
App.ScreenUpdating = False
'Ouverture d'un fichier Excel
Book = App.Workbooks.Add
'Sheet correspond à la première feuille du fichier
Sheet = Book.Worksheets(1)
For Each dc In tableTemp.Columns
'entree les noms de colonne
If debut < ColMax Then
Sheet.Cells(1, debut).Value = dc.ToString
End If
debut = debut + 1
Next
Dim numLigne As Integer = 2
nb = tableTemp.Columns.Count()
Dim nb2 As Int64 = tableTemp.Rows.Count()
For Each dr2 In tableTemp.Rows
For I = 0 To nb - 1 'nb - 2
With Sheet
.Cells.NumberFormat = "@"
.Cells(numLigne, I + 1) = dr2(I)
End With
Next
numLigne = numLigne + 1
Next
' Titres en Gras
Sheet.Rows(1).Font.Bold = True
' Select the first cell.
Sheet.Cells(1, 1).Select()
'sauvegarder
Try
App.DisplayAlerts = False
Sheet.SaveAs (FNxls)
Catch ex As Exception ErrStr "Erreur " & vbCrLf & ex.ToString
End Try
App.Workbooks.Close()
App.ScreenUpdating = True
App.Quit()
App = Nothing
, ----
[../code.aspx?ID=41455 By Renfield]
Après il faut aussi voir le nombre de ligne (et de colonnes) que doit écrire le programme peu être est ce "normal" que cela soit long. dépend de la quantité de données.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 30 sept. 2008 à 11:58
Bonjour, Julien,
Il y a un autre aspect, que nous ignorons :
Si sa feuille contient des formules de calculs divers, le calcul se fera à chaque modif de cellule ...
Il lui faut également peut-être alors penser à ne permettre les calculs qu'une fois les cellules modifiées (à la fin).
Corbel88
Messages postés10Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention 8 janvier 20091 30 sept. 2008 à 12:54
J'ai 13 colonnes mais le nombres de lignes augmente tout le
temps.
Je récupère ces données d'une base de données de produit donc
en constante évolution.
Je n'ai aucunes formules de calculs.
Pour écrire 1080 lignes j'ai besoin de 6 à 7 minutes.