Raket drijfgas karakterisering, C++ Excel automatisering, Boost eigenschap boomstructuur en de TC-Logger (6 / 8 stap)

Stap 6: C++ automatisering van Excel...


TCLogger2Excel begon als een Windows-opdrachtregeltoepassing maar werd omgezet in een MFC-dialoogvenster gebaseerde toepassing om het toevoegen van het dialoogvenster dat de standaardwaarden in de sectie variabelen van elke Excel-werkblad stelt. Het voordeel van het gebruik van MFC is dat het gemakkelijk is! Het is niet een perfecte UI bibliotheek, maar het is zeer makkelijk te gebruiken. Ik zal geen betrekking op de MFC-code in dit Instructable maar in plaats daarvan zal concentreren op de belangrijkste onderdelen van de code die nuttig zijn kunnen bij het schrijven van andere programma's uit te leggen. De eerste van die gebieden is hoe Excel automatiseren van C++.

Eerst een paar woorden over beide keuzes hier, C++ en Excel.

Excel werd geselecteerd omdat het is een krachtig hulpmiddel voor het bewerken en weergeven van gegevens. Excel-grafieken maken onze stuwkracht en druk curven visueel begrijpelijk. De Excel-formules op het een & n tabblad cover wiskunde dat is ver buiten mijn comfortniveau. Door het nemen van de TC-Logger opgenomen gegevens en nu brengen deze in Excel de gebruiker kunt manipuleren en talloze berekeningen en bewerkingen uit te voeren.

C++ is aan de andere kant mijn programmeer taal van keuze! Ik zal u niet vervelen met een lange monoloog op haar deugden of de fouten van andere programmeertalen. Ik zal alleen zeggen dat als een professionele programmeur voor enkele tientallen jaren, en op veel platformen, C++ biedt de meeste kracht op het grootste gemak. Daarmee kan ik niet alleen geoptimaliseerde systeemeigen code genereren, maar met moderne C++ ik kan het gebruiken van de krachtige functies van de C++ Standard Library die rivaal die in elke andere programmeertaal, in termen van macht, begrijpelijkheid en gebruiksgemak.

Automatiseren van Excel vanaf C++

COM-automatisering maakt het gemakkelijk voor het automatiseren van Microsoft Excel. Om te beginnen u wilt importeren van de Excel-typebibliotheken zoals hieronder (van ExcelAutomation.cpp):

Hierdoor wordt de compiler voor het genereren van de headerbestanden (EXCEL.tlh en MSO.tlh) en implementatie bestanden (EXCEL.tli en MSO.tli) die het gebruik van de COM-automatiseringsobjecten die we zullen gebruiken vereenvoudigen. Als u de bestanden van de .tlh vindt u een schat aan informatie die nuttig worden zal als u verschillende taken uitvoeren openen.

Vervolgens moeten we een nieuw exemplaar van het object Excel application. De volgende code is overgenomen uit de CreateExcelSpreadsheet functie in ExcelAutomation.cpp...

Het eerste blok stelt de COM-omgeving en het met behulp van N4189 de scope_exit klasse, tranen omlaag wanneer aShutdown buiten bereik aan het einde van de functie raakt:

Het volgende blok ziet als het register op deze machine een vermelding voor Excel heeft. Het is niet een garantie dat Excel is geïnstalleerd, maar het is een goede start:

Nu maken we een exemplaar van het Excel-object:

Met deze opstelling in plaats we kunnen nu werkbladen maken, vullen van cellen, grafieken maken en nog veel meer. Om dit te illustreren zullen we vervolgens de toepassing zichtbaar maken, maak een werkmap en het toepassingsvenster maximaliseren.

pXLBook is het object van de Excel-werkmap dat we gebruik door de rest van het programma maken zullen.

De (slecht benoemde) functie ProduceExcelWorkbook in de ExcelAutomation.cpp werkt altijd met de actieve Excel-werkblad:

We kunnen het werkblad geven een naam met code als volgt:

Het is belangrijk op te merken dat de Excel-objecten met een naam die eindigt in Ptr zoals Excel::_WorksheetPtr RAII C++ objecten vergelijkbaar met die welke worden aangeboden door N4189 zijn. _bstr_t is ook een RAII-object. Kortom dat betekent dat het geheugen achter deze objecten automatisch vrijgegeven wanneer de variabele ruimte laat, zelfs als dat vanwege een uitzondering gebeurt. (Dit laatste is een concept dat veel C/C++ programmeurs vergeten! Het is zeer belangrijk dat u RAII of anders zodat object-opschonen wanneer een uitzondering unwinds! Als u vergrendelen een CRITICAL_SECTION bijvoorbeeld met behulp van EnterCriticalSection, maar niet te LeaveCriticalSection wanneer een uitzondering uw code om te ontspannen veroorzaakt--misschien zelfs een uitzondering ergens in een bibliotheek u belt, u zal het lekken van de sluis en het zal bijna onmogelijk op te sporen zelfs onder de debugger. Je zal eindigen met een impasse die geen zin! RAII objecten gebruiken! Het enige alternatief is het gebruik van try/finally-blokken voor elke resource!)

Later wanneer we een nieuw werkblad moeten de volgende code wordt gemaakt:

Met een actieve werkblad, kunnen de gegevens in een cel met een functie zoals deze van ExcelAutomation.cpp worden geplaatst:

Merk op dat een "celbereik" (pDataRange) wordt gemaakt en vervolgens een string-waarde toegewezen. U kunt ook een SAFEARRAY zijn, met de gegevens toewijzen aan een celbereik voorbereiden. Lijnen om te zien hoe dit wordt gedaan kijken ExcelAutomation.cpp 270-397.

ExcelAutomation.cpp laat ook zien hoe een grafiek toevoegen aan een werkblad (2 verschillende voorbeelden), grafieklabels aanpassen, toevoegen van een trendlijn, gekleurde cellen, en tekengrootte van label wijzigen.

Een laatste tip... Als u een macro in Excel maken en vervolgens te bewerken, verschijnt het volgende Visual Basic-code die is heel makkelijk te converteren naar C++ met behulp van de voorbeelden in de ExcelAutomation.cpp.

Gerelateerde Artikelen

Multi-Functional Star Wars Astromech Droid

Multi-Functional Star Wars Astromech Droid

E4-B4Astromech droid voor het huis.Video links voor mobiele apparaten die de videominiaturen bovenstaande animatie wordt niet afgespeeld:Het maken van E4-B4 Astromech Droid VideoE4-B4: Showcase Video, deel 1E4-B4: Rocket Man VideoE4-B4: Zin in een dr
Android Appinventor Tutorial: Space Invaders App

Android Appinventor Tutorial: Space Invaders App

In dit Instructable zal ik het onderwijzen van hoe maak een fundamentele Space Invaders spel op MIT App uitvinder 2. U hoeft niet iets om de app te downloaden, en de website is gratis. De app die u het beste werkt op Android-apparaten. Als u geen een
Bommen en vuurwerk vanuit huis (zelfgemaakte)

Bommen en vuurwerk vanuit huis (zelfgemaakte)

vond ik een grote set van instructies over hoe te maken van explosieven van elke omvang van uw POCKET(hint) op de grens van de materialen die u kopen kunnen zonder wordt gearresteerd, die in sommige gevallen is vrij groot. Ik dacht dat het zou goed z
Raspberry Pi temperatuur Logger

Raspberry Pi temperatuur Logger

Hier zijn de instructies voor het bouwen van een eenvoudige temperatuur logger met behulp van een $5.00 I2C temperatuursensor. De gegevens op de SD-kaart is opgeslagen en kan eenvoudig worden geïmporteerd in excel. Eenvoudig te wijzigen of toe te voe
Bouwen van een High Power raket straalpijp

Bouwen van een High Power raket straalpijp

Experimentele hoge macht Rocketry is een extreme sport biedt makers een grote verscheidenheid aan mogelijkheden gebruik te maken van hun vaardigheden, nieuwe vaardigheden te verkrijgen en vervolgens verkennen... Nou, raketwetenschap! Ik zal in dit In
3D afgedrukt trechters voor raketmotor drijfgas Casting

3D afgedrukt trechters voor raketmotor drijfgas Casting

Onderzoek raket motoren zijn gemaakt door het gieten van verschillende formules van ammoniumnitraat perchloraat samengestelde drijfgas (APCP) in buizen - meestal kartonnen buizen waardoor een as draait om te vormen van een kern. Een van de meer nutti
Bouwen van een raket Crayon

Bouwen van een raket Crayon

als u als me bent, iets dat eruit ziet als een buis en komt tot een punt kan worden gemaakt in een raket.  Kleurpotloden perfect deze beschrijving, zodat wanneer ik vond een gigantische krijt-vormige bank in de winkel, ik meteen haar lot wist.Dit Ins
Raket hoogtemeter Logger

Raket hoogtemeter Logger

Met behulp van onze SD card en druk sensor schilden, we zullen het creëren van een datalogger die bijhoudt van de hoogte van een object, zoals een model raket! Als u zien van de beelden van onze raket lanceringen wilt, check out de video hier!Stap 1:
Grafisch ontwerp InDesign automatisering

Grafisch ontwerp InDesign automatisering

Iedereen kan dozen verplaatsen in InDesign en Illustrator. Maar niet iedereen kunt de hulpmiddelen tot hun beschikking om te verhogen hun workflow en maximaliseren van hun tijd.Automatisering is de sleutel tot het creëren van grote hoeveelheden werk
Raket aangedreven snowboard bijlage

Raket aangedreven snowboard bijlage

Blast door uw rivalen met deze raket aangedreven snowboard! Ontworpen om te worden epoxied of gelijmd direct op het bord. Het maakt gebruik van 24mm motoren zonder schietstoelsystemen kosten (ik ben niet zwaar dus 24 mm prima is maar u u een Motorinh
De Lanceerinrichting van de raket van Arduino Model voor 3D afgedrukt raketten

De Lanceerinrichting van de raket van Arduino Model voor 3D afgedrukt raketten

Toen ik een kind was, ik hield van spelen met Estes raketten, dus heb ik besloten om terug te gaan in de hobby maar met behulp van al mijn maker skizzls. Dus is hier een echt cool Arduino Rocket Launcher lancering 3D Printed raketten uit mijn MakerBo
Raket Grill!

Raket Grill!

Willen een D.I.Y. manier om voedsel koken zonder gebruik van fossiele brandstof L.P. of moetend houtskool kopen? Ik weet dat ik deed. Dat is waarom ik bouwde een "Rocket Grill"!Dit is slechts een variatie op een "rocket stove" - een ee
Maken van een microcontroller gebaseerde boost converter

Maken van een microcontroller gebaseerde boost converter

Ik moest voor een recent project, verhoging van de productie van een USB-poort van de (hoog ampage opladen) van 5V tot 18V voor het aandrijven van een versterkte luidspreker. Ik besliste te proberen mijn eigen boost converter rollen (vooral omdat spe
Een raket Eggstronaut Project

Een raket Eggstronaut Project

ik heb alle soorten waterfles raketten op Instructables en tijdens het surfen op het web maar ik zou denken een Instructable met het geleidelijke proces van het bouwen van een hele hoop van hen met een klasse van rang zes kinderen goed. Elke stap in