Acties:
  • 0 Henk 'm!

  • vvermeer
  • Registratie: April 2010
  • Laatst online: 09-10-2015
Beste mede Tweakers,

Afgelopen 2 maanden is er met collega's hard gewerkt aan het maken van een database. In deze database zijn 637 losse Excel bestanden handmatig samengevoegd d.m.v. kopiëren plakken. Echter nu het project bijna aan zijn einde is gekomen bleken er enkele cruciale fouten in de database te zitten. Dit heeft tot gevolg dat de gehele database opnieuw gemaakt zal moeten worden.

Vanwege de tijdsdruk lijkt dit vrijwel onmogelijk en dus ben ik opzoek naar alternatieven om de database opnieuw te kunnen maken i.p.v. handmatig te kopiëren en plakken. Hiervoor heb ik gezocht in het forum en op het internet waaruit is gebleken dat het mogelijk schijnt te zijn dit via VBA te doen. Hiervoor heb ik dan ook een code gevonden die tevergeefs maar niet werkt.

Wat er exact moet gebeuren is dat er uit 4 tabbladen per Excel alle informatie gekopieerd wordt en deze in 1 centrale database komt, waar deze zelfde 4 tabbladen in zitten. Is er iemand die ons hiermee zou kunnen helpen! Alle hulp is meer dan welkom. Op de manier zoals ik het nu doe: ='C:\temp\[naam.xlsm]DatabaseElement'!$A$4:$L$121 ontstaan er teveel foutmeldingen en kan het niet snel genoeg uitgevoerd worden.

Ik hoop dat het middels dit forum opgelost kan worden. Eventueel zijn wij bereid om tegen betaling gebruik te maken van uw kennis om dit zo snel als mogelijk op te lossen (Teamviewer).

Vriendelijke groet,
Vincent Vermeer

Acties:
  • 0 Henk 'm!

  • xleeuwx
  • Registratie: Oktober 2009
  • Laatst online: 10-09 16:30

xleeuwx

developer Tweakers Elect
Is elk excel bestand zelfde kwa structuur?

Mocht dit zo zijn is het natuurlijk makkelijk te automatiseren. Eventueel door een Ontwikkelaar in te huren (8 uur werk (maken + testen))

Acties:
  • 0 Henk 'm!

  • Speedmaster
  • Registratie: Juli 2005
  • Laatst online: 23:41

Speedmaster

Make my day...

Waarom geen Acces database met gekoppelde tabellen naar de excel files, kwestie van alle data naar de Access database kopiëren en vervolgens ut laten poepen in het gewenste excel formaat.

Acties:
  • 0 Henk 'm!

  • Breezers
  • Registratie: Juli 2011
  • Laatst online: 16-03-2021
Om wat voor database gaat het hier om ? Een database met tabbladen zegt mij niets, tenzij je het over een frontend applicatie hebt ?

“We don't make mistakes just happy little accidents” - Bob Ross


Acties:
  • 0 Henk 'm!

  • EvilWhiteDragon
  • Registratie: Februari 2003
  • Laatst online: 11-09 12:12
Om je probleem beter te begrijpen zou je op zijn minst de tabelstructuur van je (huidige) database moeten posten. Verder is het handig als je verteld wat voor databasesysteem gebruikt wordt. Ik gok dat ook dit Excel is. (waarom geen Access of echte DB?).

LinkedIn
BlackIntel


Acties:
  • 0 Henk 'm!

  • vvermeer
  • Registratie: April 2010
  • Laatst online: 09-10-2015
Elk Excelbestand is het zelfde wat betreft de structuur. Echter het ene bestand bevat 120 regels informatie per tabblad de ander slechts 1. Het varieert dus in grote waardoor de selectie veel witregels en foutmeldingen bevat. Met Microsoft Acces zijn wij niet erg bekend ik zal daar eerst eens naar kijken. Alvast bedankt tot zover!

De database is een leeg Excel bestand die de zelfde tabbladen heeft als alle losse bestanden zeg maar 1 2 3 4 . Hierin moet de zelfde informatie komen maar dan van alle bestanden onder elkaar.

Het is de eerste keer waarbij wij een project doen met deze omvang het werken met deze systemen is ons momenteel nog vreemd

[ Voor 11% gewijzigd door vvermeer op 26-08-2015 17:02 ]


Acties:
  • 0 Henk 'm!

  • xleeuwx
  • Registratie: Oktober 2009
  • Laatst online: 10-09 16:30

xleeuwx

developer Tweakers Elect
vvermeer schreef op woensdag 26 augustus 2015 @ 17:00:
Elk Excelbestand is het zelfde wat betreft de structuur. Echter het ene bestand bevat 120 regels informatie per tabblad de ander slechts 1. Het varieert dus in grote waardoor de selectie veel witregels en foutmeldingen bevat. Met Mircosoft Acces zijn wij niet erg bekend ik zal daar eerst eens naar kijken. Alavst bedankt tot zover!

De database is een leeg Excel bestand die de zelfde tabbladen heeft als alle losse bestanden zeg maar 1 2 3 4 . Hierin moet de zelfde informatie komen maar dan van alle bestanden onder elkaar.
Wat ik hieruit gebruik is er dus geen Centrale Database maar wil je gewoon Excel file samenvoegen 8)

Acties:
  • 0 Henk 'm!

  • vvermeer
  • Registratie: April 2010
  • Laatst online: 09-10-2015
Ja dat klopt. We moeten de Excel files samenvoegen.

Acties:
  • 0 Henk 'm!

  • Belindo
  • Registratie: December 2012
  • Laatst online: 22:15

Belindo

▶ ─🔘─────── 15:02

In plaats van in je VBA code de range te hardcoden, kun je dit ook variabel doen. Er van uitgaande dat je ten minste één kolom hebt zonder lege rijen.

Pseudo code:
Visual Basic:
1
2
3
NumRows = Application.Worksheetfunction.CountA(Range("A:A"))

Range("A4:L" & NumRows & "").Select

Coding in the cold; <brrrrr />


Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 15:42
Statische of dynamische data (formules)? Als het statische data is kan je misschien een shortcut nemen:
* sla elk bestand/tabblad op als CSV (dat is vast wel ergens te automatiseren)
* met een text-merge-tooltje alle bestanden achter elkaar plakken en als nieuw CSV-bestand opslaan
* nieuwe bestand openen in Excel

Misschien niet de netste manier, maar mits er een tooltje bestaat om meerdere XLS-bestanden in batch (en incl. alle tabbladen) naar CSV te exporteren misschien wel de snelste manier.

Update: tooltje lijkt het probleem niet te zijn

[ Voor 15% gewijzigd door sjroorda op 26-08-2015 17:13 ]


Acties:
  • 0 Henk 'm!

  • vvermeer
  • Registratie: April 2010
  • Laatst online: 09-10-2015
Beste Belindo bedankt voor uw tip. Echter met VBA lukt het ons nog niet om een werkende code te vinden die van toepassing is op onze database. Hier zijn we momenteel naar opzoek of naar een oplossing met Access. In Access lukt het momenteel tot op een bepaalde hoogte. Echter hiervoor moeten alle macro's uitgeschakeld worden. Is hier een tool voor?

Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 08-09 13:19

MAX3400

XBL: OctagonQontrol

Yup, dat is ook een stukje code wat je kan aftrappen per blad of per instance van de applicatie waardoor zaken worden uitgeschakeld of ingeschakeld.

Ben alleen benieuwd waarom Access gekozen is als oplossing; het staat nou niet echt bekend om een "solide performance" en biedt eigenlijk (maar lees dat even elders goed na) geen mogelijkheden om met meer dan 1 persoon tegelijk te werken aan de inhoud van de database; hier kunnen namelijk nog wel eens fouten optreden in de data.

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • 0 Henk 'm!

  • vvermeer
  • Registratie: April 2010
  • Laatst online: 09-10-2015
Met CSV is zojuist een poging gedaan. Echter dit levert niet het gewenste resultaat op. Het pakt alleen informatie uit het eerste tabblad.

Acties:
  • 0 Henk 'm!

  • Freddy_Fish
  • Registratie: April 2002
  • Laatst online: 01:15

Freddy_Fish

de Verdwenen Zeewierzaadjes

Net even de trial van onderstaande plugin gedownload en die doet volgens mij wat je wilt:

https://www.ablebits.com/...ksheets-consolidation.php

Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 10-09 22:05
Ik denk dat het ook tijd wordt dat de processen bij de TS herzien worden : waarschijnlijk was het goedkoper (in manuren) om voor een degelijke oplossing te gaan (een "echte" database ipv gebundelde excel sheets, op maat software, dat soort dingen).

Via Powershell (excel com object aanroepen) is het wss in een uurtje gepiept evenals met een vb script.
De tijd die jouw collega in het handmatige copy/paste werk heeft gestoken was beter besteed geweest aan het leren van PS of VB, dan was EN het werk in de helft van de tijd klaar geweest en had men ervaring opgedaan om fouten te kunnen herstellen of in de toekomst hetzelfde binnen 5 minuten voor elkaar te krijgen.

[ Voor 1% gewijzigd door Killah_Priest op 26-08-2015 19:21 . Reden: typos ]


Acties:
  • 0 Henk 'm!

  • Rupie
  • Registratie: Augustus 2006
  • Laatst online: 08-09 15:19
Dit heeft niets met het Windows operating system te maken, ik verplaats je topic naar CSA.

Desktop | Server | Laptop


Acties:
  • 0 Henk 'm!

  • Speedmaster
  • Registratie: Juli 2005
  • Laatst online: 23:41

Speedmaster

Make my day...

Als het gaat om Macro's uitschakelen in de database zelf dan kan je dit terug vinden bij Opties - Vertrouwens centrum - Instellingen Vertrouwenscentrum. Hier kan je instellen hoe access moet omgaan met macro's

Acties:
  • 0 Henk 'm!

  • _Garu_
  • Registratie: Juni 2014
  • Laatst online: 28-12-2024
Ik importeer excel of csv files middels vba batch werk, die kun je prima gebruiken om dynamisch te laten bepalen hoeveel data er op een tabblad staat. Als alle velden gevuld zijn met dezelfde soort data is dat redelijk makkelijk te doen.

Maar vraag blijft wel of dit eenmalig is of dat er geregeld data bijkomt en wat je verder met de data gaat doen. Je loopt in oude excel versies nog tegen maximaal aantal regels aan en voor een beetje performance wil je niet 50MB aan formules hebben als je berekeningen ook met pivot of vba kunt regelen. Maar wellicht kun je daar iets meer over vertellen, dan is het makkelijker je te helpen

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 11-09 08:54
In Python is dit heel erg eenvoudig, maar ik weet niet of je daar aan wilt.

Stap 1: Installeer Miniconda: http://conda.pydata.org/miniconda.html
Stap 2: Installeer openpyxl, met commando: conda install openpyxl
Stap 3: Copy - paste het onderstaande script in "merge.py" en ze deze bij de xlsx bestanden
Stap 4: Run "python merge.py"

Hieronder een simpel scriptje om alle xlsx files uit een dir in te lezen en de tabbladen achter elkaar te plakken, zoals:

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# Import XLSX reader
from os import listdir
from openpyxl import load_workbook

# Get filenames from current dir
files = []
for name in listdir("."):
    if name.find(".xlsx") > -1:
        files.append(name)
        
# Loop over Excel files
for file in files:
    # Load the file
    wb = load_workbook(file)

    # Loop over (sorted) worksheets
    for sname in sorted(wb.get_sheet_names()):
        # Get the worksheet
        ws = wb[sname]
        
        # Open CSV file for with the sheet name
        outfile = open(sname + ".txt", "a")
        
        # Loop over rows, cells
        for row in ws.rows:
            for cell in row:
                # Write cell to file
                outfile.write(str(cell.value) + ";")
            
            # Write new line after row
            outfile.write("\n")
        
        # Close the file
        outfile.close()


Dit script doet het volgende:
1) Pak de namen van alle xlsx bestanden uit huidige dir
2) Open een xlsx bestand en lees de werkblad namen
3) Open een txt bestand met dezelfde naam als het werkblad
4) Plak alle cellen van het werkblad achteraan het txt bestand
5) Rinse en repeat vanaf stap 2

Het kan ongetwijfeld veel mooier, maar het is een eenvoudige oplossing ;)


P. S. Let erop dat dit script alleen werkt als alle files exact dezelfde structuur hebben qua werkbladen en kolommen!

P. P. S. Je kunt ook gewoon Python installeren en dan pip gebruiken om openpyxl te installeren

[ Voor 9% gewijzigd door Morrar op 27-08-2015 11:36 ]


Acties:
  • 0 Henk 'm!

  • vvermeer
  • Registratie: April 2010
  • Laatst online: 09-10-2015
Beste Tweakers,

In de tussentijd is er veel geprobeerd en met resultaat. Afgelopen dag is er een programmeur geweest die een macro heeft geschreven waarmee alle bestanden tot 1 worden samengevoegd. De database is dus op tijd af gekomen en ik wil jullie enorm bedanken voor de inzet en moeite. Indien gewenst kan ik de macro doorsturen naar de geïnteresseerde.

mvg,
Vincent
Pagina: 1