Toon posts:

[Excel] Via VB sneller een excel sheet samenstellen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste Tweakers,

Ik ben al een aardige tijd aan het rommelen in Visual Basic, en momenteel ben ik bezig om via Visual Basic (dus geen VBA!) om een Excel -bestand te exporteren. Nou is dit niet zo gek moeilijk dankzij de topics die al op GOT staan (bedankt!). Ik heb hiervoor de volgende "code" gebruikt;

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dim e As New Excel.Application
Dim wb As New Excel.Workbook
Dim ws As Excel.Worksheet

Set wb = e.Workbooks.Add
Set ws = wb.Worksheets(1)

With ws.Cells(2, 2).FormulaR1C1 = "Afsluitschema"
... ect

wb.SaveAs "c:\temp.xls"
wb.Close True

Set ws = Nothing
Set wb = Nothing
Set e = Nothing


Deze "code" werkt perfect, maar het grootste probleem is dat het opbouwen van deze sheet erg veel tijd in beslag neemt. Dus mijn vraag aan jullie is, is het mogelijk om de beweking van de sheet te versnellen, en zo ja, hoe?

Stephan224 8)

  • lexited
  • Registratie: Maart 2001
  • Laatst online: 29-06 09:18
heb je hem visible of niet ?
niet visible is een stuk sneller

1 - 2 - 3


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

De meeste verbetering zul je waarschijnlijk kunnen realiseren door je programmastructuur te optimaliseren.
Dus bijvoorbeeld ipv. 100x een veldje vullen met waarde '1', 1x een veldje vullen en deze in een range te copy/pasten.
Ik heb ook wel eens gemerkt dat excel sneller is met bewerkingen als je het excel scherm minimaliseert.

Who is John Galt?


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Je geeft aan dat het opbouwen van de sheet erg lang duurt, maar de vraag is natuurlijk WAT er lang duurt. De code die hierboven staat zorgt ervoor dat Excel gestart wordt en je echt fysiek in een Excelsheet dingen gaat invullen. Het starten van Excel duurt (uiteraard) altijd langer dan wanneer je iets in een tekstbestandje wil gooien.

Je hebt puntjes gezet op de plaats waar je nuttige code staat, want het openen en sluiten van een Excel applicatie is niet echt verschrikkelijk veel sneller te maken. Het gaat erom dat je de code voor het vullen van de sheet zo optimaal mogelijk maakt. Laat eens wat (relevante!) code zien voor het vullen van je sheet, wellicht dat daar nog wat aan optimalisatie te doen is.

Mocht je niet meer met een excel.Application willen werken, dan is het wellicht een idee om alles comma separated te exporteren naar een .csv bestand en deze vervolgens in Excel te openen. Op die manier krijg je de gegevens wel in Excel maar dan met een kleine omweg...

My personal website


Verwijderd

Een van de zaken die bij mij Excel sneller laat werken is "Automatisch berekeken" Uit te zetten in de applicatie en dan pas de sheet op te bouwen. Vervolgens een Calculate functie in je Visual Basic code.

  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 19-08 19:06
Je zou er ook aan kunnen denken dit niet via deze manier te doen, maar een manier die zelf daadwerkelijk een Excel-bestand genereert. Ik ben op het moment toevallig zelf ook bezig met iets dergelijks (echter wel in PHP), en kwam al snel tot de conclusie dat via COM het proces niet echt lekker verloopt (meerdere instanties van Excel die niet meer gesloten kunnen worden door fouten in mijn code enz.).

Zoek eens naar een componentje dat dit zelf kan, dan hoef je ook niet van de gebruiker te verlangen dat deze Excel geinstalleerd heeft.

Verwijderd

Topicstarter
Ik ben eruit, hieronder nog even mijn conclusie aan de hand van jullie reacties;

De vertraging zat em hoofdzakelijk in de bewerking van de cellen, ik maakte gebruik van de WITH -functie in VB als ik een cel eigenschappen wou geven. Dit leverde zeer veel vertaging op, maar ik ben wat gaan afkijken van de macro -routines, hier heb ik veel kunnen leren van de RANGE -procedure. En (het stond er weleenswaar niet bij in de code) de visible -mode geeft ook veel vertraging.

Het viel me echter wel op dat het invullen van formules in de cellen en de sheet tegelijker tijd laten rekenen niet veel vertraagd. (Heeft misschien met de visible -mode te maken?!)

Ps Ik ben dit programma niet voor commerciele doeleinden aan het schrijven, dus ik hoef niet van een gebruiker moeten verlangen dat ie Excel heeft. De bedoeling is nl dat het een soort van personeels planningssysteem wordt dat moet exporteren naar excel ivm de grafische weergave.

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

De bedoeling is nl dat het een soort van personeels planningssysteem wordt dat moet exporteren naar excel ivm de grafische weergave.
Als ik naar bovenstaande quote kijk, dan denk ik meteen aan
Mocht je niet meer met een excel.Application willen werken, dan is het wellicht een idee om alles comma separated te exporteren naar een .csv bestand en deze vervolgens in Excel te openen. Op die manier krijg je de gegevens wel in Excel maar dan met een kleine omweg...
Voordelen hiervan zijn:
• Geen excel nodig voor export
• Sneller werken omdat schrijven naar een textfile rap werkt
• Makkelijk(er) te verwerken door/te importeren in andere software
• ...

Nadelen zijn echter:
• Altijd (handmatige) acties nodig om gegevens precies zo in Excel te krijgen als je wil
• Minder sjieke oplossing dan native Excel bestand
• Geen beschikking over extra's Excel (oa functies, voorwaardelijk opmaak, etc)
• ...

Al met al een afweging die gemaakt moet worden door jou als programmeur, misschien naar aanleiding van geluiden uit 'het veld'.

Oh ja... misschien (waarschijnlijk) zijn er inderdaad componenten waarmee je Excel-bestanden kunt schrijven in VB zonder Excel ter beschikking te hebben, maar daar heb ik het nu even niet over. Ik beperk me in deze post even tot deze twee opties. Ik vraag me overigens ook af of dergelijke componenten gratis te gebruiken zijn...?

Als iemand anders argumenten heeft om het anders op te lossen hoor ik ze graag. En de TS waarschijnlijk ook ;)

My personal website

Pagina: 1