Ik wil af en toe alle elementen in deze lijst tegelijk kunnen selecteren. |
Sla een Report op als HTML. Link dit bestand in Excel. Bij de instellingen van het importeren kan je aangeven dat deze link steeds vernieuwd dient te worden. Op die manier kan je het HTML bestand elke keer weer overschrijven, met een nieuwe versie. Zorg dat je bij het importeren de exacte HTML tekst ziet zonder opmaak. Dit vereenvoudigd het geautomatiseerd zoeken naar de ID’s omdat er maar 1 kolom is.
Ga op een ander tabblad in Excel een mooie formule bouwen. Doe dit in verschillende stappen. En kopieer de formule vervolgens door naar beneden. Op zo'n manier, dat er naar elke regel in de HTML een verwijzing is in de formules op het andere blad.
- We beginnen met bouwen in de Cel A2. De formule moet zoeken in de inhoud van cel A2 op het andere blad naar de benaming ": id ". Doe dit met de functie VIND.ALLES. (FIND) In de eerste regel van het Report zal natuurlijk geen ID voorkomen aangezien het een kop is. Maar verderop komen ze wel voor.
- Rapporteer de ID op basis van bovenstaand startpunt in de regel. Doe dit met de functie DEEL (MID). De ID is bij mij 6 of 7 karakters lang Dus je kan 7 gebruiken want de eventuele extra spatie is niet relevant. Het startpunt voor de functie is 5 karakters verder dan de waarde gevonden bij punt 1. (": id " = 4 karakters). Als je het nu al moeilijk vind kan je overigens beter afhaken. Want we zijn er nog niet.
- Aangezien niet elke regel een ID herbergt is het goed om de foutmeldingen #WAARDE te ondervangen. Dit doe je met de functie ALS.FOUT (IFERROR). Laat de functie de ID rapporteren als die er is. En niks rapporteren als er geen ID is. Dit kan je doen met "".
- Voeg de ID’s van alle regels samen, door de inhoud van elke Cel te koppelen met de inhoud van bovenstaande Cel. Dit doe je met de functie TEKST.SAMENVOEGEN (CONCATENATE). Voeg tussen de ID’s een semicolon toe.
- Vanzelfsprekend moeten we deze samenvoegingen gaan voorzien van enkele voorwaarden. Als de gevonden ID al in bovenstaande Cel voorkomt, hoeft de ID immers niet meer te worden toegevoegd. Hiervoor gebruiken we een combinatie van bovenstaande functies. De totale formule wordt wat minder overzichtelijk. We gaan nu ook gebruik maken van de functie ALS (IF). Met woorden: Voeg de inhoud van de vorige cel samen met ";" en met het gevonden ID nummer, mits deze niet al voorkomt in bovenstaande Cel.
- Als de Cel erboven leeg is, moet er ook niks worden toegevoegd. Dit doen we met de functie ALS (IF). De meest logische plek voor deze voorwaardes is de plek waar uiteindelijk de ID wordt toegevoegd. We gaan dit stuk opzoeken en moeten deze aanpassen. De ALS.FOUT (IFERROR) functie gaan we aanpassen. Want er is geen foutmelding meer als de functie hier eenmaal aankomt. De controle is namenlijk al eerder gebeurt. Er hoeft alleen een semicolon en de ID worden samengevoegd. De semicolon uit punt 5 verplaatst dan naar deze nieuwe plek.
- Als we het nog iets netter willen maken, kunnen we zorgen dat de hele tekst niet begint met een semicolon. Hiervoor moeten we de semicolon nog van een voorwaarde voorzien. Namelijk dat wanneer de bovenstaande Cel leeg is, er ook geen semicolon moet worden toegevoegd.
- We lijken nu klaar te zijn, maar er zijn nog 2 aandachtspunten.Wanneer de HTML veranderd, zijn de verwijzingen stuk. Daarvoor moeten we de directe verwijzingen vervangen door een indirecte verwijzing. De indirecte verwijzing gaan we eerst op een andere plek maken, voordat we deze vervangen op plek van alle directe verwijzingen in de grote formule. We gebruiken de functies ADRES (ADDRESS), RIJ (ROW) en INDIRECT (INDIRECT). ADRES (ADRESS) levert de verwijzing op in de vorm van een tekst. Met RIJ() rapporteren we het rijnummer van de Cel die deze formule bevat. En met INDIRECT kunnen we de inhoud van de indirecte verwijzing inlezen en rapporteren. In dit geval als tekst.
- Nu gaan we in de grote formule de directe verwijzingen (Blad1!A2) vervangen voor de indirecte verwijzing INDIRECT(ADRES(RIJ();1;4;1;"Blad1")). De Formule is nu officieel onleesbaar geworden. Maar het gaat goed! We hebben nu alle unieke ID’s te pakken. En de formules zijn bestand tegen het overschrijven van het HTML bestand. Maar we willen ook nog op een eenvoudige manier deze ID’s kunnen selecteren en kopiëren naar Revit. Om dit te kunnen doen moeten we weten hoeveel rijen er in de HTML Report zitten. Je kan dat handmatig doen maar ook dit willen we automatiseren.
- Eerst moet de net gemaakte formule omlaag doorgekopieerd worden. het aantal formules moet minstens zo veel zijn als er regels in de HTML zitten. Je kan natuurlijk ook aan de veilige kant gaan zitten.
- Wanneer we de kolom A, van het blad waar het HTML bestand op staat, een Naam (Named Range) geven, bijvoorbeeld HTML. Dan kunnen we met behulp van de functie AANTAL.ALS (COUNTIF) de hoeveelheid niet lege cellen tellen. De formule is dan =AANTAL.ALS(HTML; "<>"). Met "<>" geven we aan dat het niet lege cellen zijn.
- Voor de veiligheid kan je een controle maken die de aantal gekopieerde formulecellen vergelijkt met het geïmporteerde HTML bestand. Als er meer regels in het HTML bestand zitten dan gekopieerde formulecellen, kan deze een waarschuwing geven dat niet alle ID’s kunnen worden weergegeven. Dit is eigen verantwoordelijkheid.
Sommige elementen zullen om verschillende redenen niet zichtbaar / selecteerbaar zijn. Bijvoorbeeld omdat het Sketch lijnen zijn. Ook de 2e ID op een regel zal niet in de lijst verschijnen. Daarvoor moet je alle formules nog een keer bouwen maar dan niet gaan zoeken vanaf het begin maar vanaf (na) de eerste ID. Deze formule is dus een stuk langer.
Wat kan je hier nu mee doen?
- Selecteer alles in een 3D view en gebruik de Isolate Element functie
- Gebruik het Filter of Add-ins om de selectie specifieker te maken.
- View specifieke zaken bijvoorbeeld Dimensions kan je een afwijkend Type meegeven ten teken dat ze aangepast moeten worden
- Geef alle Model categorieën een aangepaste eigenschap (bijvoorbeeld Comments) en gebruik de Filters van de Visibility Graphics om deze elementen op te laten lichten
- etc.
Als iemand meer weet hoe de ID’s door Revit worden vastgesteld en met name de lengte van de ID houd ik me aanbevolen.