Hoe importeer, lees en wijzig ik gegevens vanuit Excel? QTP/UFT
โก Slimme samenvatting
Gegevens importeren, lezen en wijzigen vanuit Excel in QTP/UFT Het maakt gebruik van het ingebouwde DataTable-object, dat een werkmap in de runtime-datatabel laadt, zodat elk automatiseringsscript teststappen kan aansturen vanuit rijen in het spreadsheet.

Spreadsheets blijven de meest gebruikelijke plek waar testers hun invoerwaarden, verwachte resultaten en omgevingsinstellingen bewaren. QTP, nu verkocht als OpenText UFT Een daarvan was nadat het product van HP naar Micro Focus was overgegaan en vervolgens naar OpenTextHet programma leest die spreadsheets via het DataTable-object. De onderstaande secties tonen de exacte instructies die worden gebruikt om een โโwerkmap te importeren, het aantal rijen te tellen, afzonderlijke cellen te lezen, waarden te wijzigen en het blad terug naar de schijf te schrijven.
Stappen voor het importeren, lezen en wijzigen van gegevens vanuit EXCEL
Stel dat u het volgende wilt importeren: Verkoop.xls Voeg je werkboek toe aan je toets.
Zodra het bestand is geรฏmporteerd in UFTDe bovenste rij wordt de kolomkop, dus structureer je gegevens dienovereenkomstig. Alles in rij 1 wordt behandeld als parameternaam in plaats van als testdata, en elke volgende rij telt als een datarij.
De syntax voor het importeren van een volledig Excel-bestand wordt hieronder weergegeven.
DataTable.Import(FileName)
In ons geval wordt de instructie als volgt. VBScript heeft geen haakjes nodig wanneer een methode als een instructie wordt aangeroepen, dus wordt hier de gewone vorm gebruikt.
DataTable.Import "D:\Automation\Sales.xls"
Na de uitvoering verschijnen de geรฏmporteerde rijen in het gegevensvenster tijdens de uitvoering precies zoals ze in het werkblad waren opgemaakt.
De syntax voor het importeren van een specifiek werkblad wordt hieronder weergegeven. SheetSource is het blad in het werkboek en SheetDest is het bestemmingsblad in de runtime-gegevenstabel.
DataTable.ImportSheet FileName, SheetSource, SheetDest
Gebruik de GetRowCount Methode om het aantal rijen met gegevens in een werkblad te verkrijgen. Elke instructie moet op een aparte regel staan.
DataTable.Import "D:\Automation\Sales.xls" row = DataTable.GetSheet(1).GetRowCount MsgBox row
Het berichtvenster dat verschijnt, toont het totaal aantal rijen voor het geรฏmporteerde werkblad.
Om de aanwijzer naar een specifieke rij te verplaatsen, gebruikt u de SetCurrentRow methode. Het tweede argument van DataTable.Value Het gaat om het bladnummer, niet om het rijnummer. Daarom moet de rijwijzer apart worden verplaatst.
DataTable.Import "D:\Automation\Sales.xls" ' In the code below, 1 is the sheet number DataTable.SetCurrentRow 1 Row1 = DataTable.Value("Year", 1) DataTable.SetCurrentRow 2 Row2 = DataTable.Value("Year", 1) MsgBox "Year Row 1 = " & Row1 & " Year Row 2 = " & Row2
Beide waarden worden uit dezelfde kolom, maar uit twee verschillende rijen gelezen, en het berichtvenster geeft ze naast elkaar weer.
Gebruik de Waarde Gebruik de methode links van een toewijzing om gegevens in het geรฏmporteerde werkblad te wijzigen. De wijziging blijft in het geheugen totdat u deze aanroept. Exporteren, waarmee de runtime-gegevenstabel wordt teruggeschreven naar een Excel-bestand.
DataTable.SetCurrentRow 1 DataTable.Value("Year", 1) = 2026 DataTable.Export "D:\Automation\Sales_Updated.xls"
De bewerkte cel is direct na het uitvoeren van de toewijzing zichtbaar in het gegevensvenster tijdens de uitvoering.
Bij het openen van de geรซxporteerde werkmap blijkt dat de gewijzigde waarden daadwerkelijk op de schijf zijn opgeslagen en niet alleen tijdens de uitvoering bewaard zijn gebleven.
๐กTip: Exporteer naar een ander bestand dan het bestand dat u hebt geรฏmporteerd. Terugschrijven naar dezelfde geopende werkmap is de snelste manier om een โโschending van de bestandsdeling te veroorzaken en de uitvoering te verliezen.
Hoe lees, wijzig en exporteer je Excel-gegevens: een compleet voorbeeld?
De bovenstaande codefragmenten demonstreren elk รฉรฉn methode. In een echte, datagestuurde test worden ze gecombineerd tot รฉรฉn lus die elke rij doorloopt, een berekening uitvoert, het resultaat opslaat en het werkblad exporteert. Stel dat het om een โโwerkmap gaat. Verkoop.xls Bevat de volgende vier kolommen en drie gegevensrijen.
| Jaar | Regio | Eenheden | Prijs |
|---|---|---|---|
| 2023 | oosten | 120 | 25 |
| 2024 | oosten | 150 | 25 |
| 2025 | West | 200 | 30 |
Het onderstaande script voegt een Revgevolg Het systeem vult de kolom rij voor rij, houdt een doorlopend totaal bij en schrijft het voltooide werkblad naar een nieuw bestand. AddParameter Deze functie wordt gebruikt omdat de kolom niet bestaat in het bronwerkblad; als deze functie wordt aangeroepen voor een kolom die al bestaat, treedt er een fout op.
' Read, calculate and export Excel data in UFT One Dim sh, rowCount, i, units, price, revenue, total DataTable.Import "D:\Automation\Sales.xls" Set sh = DataTable.GetSheet(1) sh.AddParameter "Revenue", "" rowCount = sh.GetRowCount Print "Total rows imported: " & rowCount total = 0 For i = 1 To rowCount DataTable.SetCurrentRow i units = DataTable.Value("Units", 1) price = DataTable.Value("Price", 1) revenue = CInt(units) * CInt(price) DataTable.Value("Revenue", 1) = revenue total = total + revenue Print "Row " & i & " | Year: " & DataTable.Value("Year", 1) & _ " | Region: " & DataTable.Value("Region", 1) & _ " | Revenue: " & revenue Next Print "Grand Total Revenue: " & total DataTable.Export "D:\Automation\Sales_Revenue.xls" Set sh = Nothing
Output:
Total rows imported: 3 Row 1 | Year: 2023 | Region: East | Revenue: 3000 Row 2 | Year: 2024 | Region: East | Revenue: 3750 Row 3 | Year: 2025 | Region: West | Revenue: 6000 Grand Total Revenue: 12750
Drie punten in dit script zijn belangrijker dan de rest. Ten eerste, GetRowCount Geeft 3 in plaats van 4 terug omdat de kopregel als kolomnamen wordt gebruikt. Ten tweede, SetCurrentRow wordt aan het begin van elke iteratie aangeroepen; zonder deze aanroep zouden alle drie de iteraties dezelfde rij lezen. Ten derde zijn de waarden die uit de gegevenstabel komen tekenreeksen, dus CInt wordt toegepast vรณรณr de vermenigvuldiging om stringconcatenatie in plaats van rekenkundige bewerkingen te voorkomen. Overslaanping DataTable.Export De berekende omzet zou wel zichtbaar blijven in het gegevensvenster, maar niet in een bestand op de schijf worden opgeslagen.
DataTable-object versus Excel COM-object in UFT
Het DataTable-object is niet de enige manier om toegang te krijgen tot een spreadsheet. UFT scripts kunnen ook een Excel.Application COM-object en rechtstreeks aansturen van Excel. De twee benaderingen lossen verschillende problemen op.
| Aspect | DataTable-object | Excel COM-object |
|---|---|---|
| Excel-installatie | Niet vereist op de uitvoerende machine | Microsoft Excel moet geรฏnstalleerd zijn. |
| Stijl van het adresseren | Op basis van kolomnaam en rijwijzer | Op basis van celcoรถrdinaten, bereiken of benoemde bereiken |
| Iteraties | Rijen sturen testiteraties automatisch uit | Geen link naar iteraties; looping is handmatig |
| Opmaak en formules | Genegeerd; alleen waarden worden gelezen. | Volledige toegang tot formules, kleuren en tabellen. |
| Meerdere werkboeken | Eรฉn runtime-tabel, werkbladen worden รฉรฉn voor รฉรฉn geรฏmporteerd. | Een willekeurig aantal werkmappen tegelijk geopend |
| Rapportage van de resultaten | Waarden verschijnen in de UFT resultaten automatisch uitvoeren | Er wordt niets vastgelegd tenzij u het zelf meldt. |
| Opruimlast | Behandeld door UFT | Je moet elk object sluiten, afsluiten en vrijgeven. |
De praktische regel is eenvoudig. Gebruik het DataTable-object voor eenvoudige parameterisering, waarbij elke rij in het spreadsheet een iteratie wordt van een automatisering testen Schakel alleen over naar het COM-object wanneer u iets nodig hebt dat de gegevenstabel niet kan weergeven, zoals het uitlezen van een formuleresultaat, het schrijven van een opgemaakt rapport of het vergelijken van twee werkmappen in hetzelfde script. Het onderstaande voorbeeld leest รฉรฉn cel, schrijft een status terug en sluit Excel correct af.
Dim xlApp, xlBook, xlSheet, cellValue Set xlApp = CreateObject("Excel.Application") xlApp.Visible = False xlApp.DisplayAlerts = False Set xlBook = xlApp.Workbooks.Open("D:\Automation\Sales.xls") Set xlSheet = xlBook.Worksheets("Sheet1") cellValue = xlSheet.Cells(2, 1).Value Print "Cell A2 contains: " & cellValue xlSheet.Cells(2, 5).Value = "Reviewed" xlBook.Save ' Release everything, in this order xlBook.Close False xlApp.Quit Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing
Output:
Cell A2 contains: 2023
Cel A2 bevat 2023 omdat rij 1 van het werkblad de koprij is en kolom A JaarMerk op dat COM-adressering op basis van รฉรฉn werkt en de header meetelt, terwijl DataTable.SetCurrentRow 1 wijst naar de eerste gegevensrij.
Veelvoorkomende fouten bij het gebruik van Excel met UFT en hoe je ze kunt oplossen
De meeste Excel-problemen in UFT Ze komen voort uit een kleine reeks herhaalbare fouten. Door ze te herkennen, bespaar je veel tijd bij het debuggen.
โ ๏ธ Waarschuwing: Een achtergebleven EXCEL.EXE-proces is het meest voorkomende neveneffect van COM-automatisering. CreateObject("Excel.Application") dat niet overeenkomt met Quit plus Set โฆ = Nothing Laat een verborgen Excel-instantie actief. Na een paar honderd testruns raakt de machine die de test uitvoert overbelast qua geheugen en wordt het bronwerkblad vergrendeld voor bewerking.
- Excel blijft in het geheugen. Sluit het werkblad, bel
xlApp.QuitVervolgens moet u de objecten voor het werkblad, de werkmap en de toepassing in die volgorde vrijgeven. Door eerst de toepassing vrij te geven, blijft er een actieve verwijzing bestaan โโen blijft het proces actief. - De wijzigingen verdwijnen na afloop van de run.
DataTable.Valueschrijft alleen naar de runtime-datatabel. ZonderDataTable.ExportEr komt niets in het bestandssysteem terecht. - "De kolom bestaat niet" of een ongeldige parameterfout. De kolomnaam die is doorgegeven aan
DataTable.Valuemoet exact overeenkomen met de koptekstcel, inclusief spaties aan het einde. GebruikAddParameterEen kolom aanmaken voordat je erin schrijft. - Elke iteratie leest dezelfde waarden.
SetCurrentRowDe functie werd niet binnen de lus aangeroepen, waardoor de rijaanwijzer nooit verplaatst werd. - Een verschil van รฉรฉn rij telt mee.
GetRowCountDe kopregel wordt uitgesloten. Een werkmap met een kopregel en tien records retourneert 10, niet 11. - Pad- en toegangsfouten. Voorgeprogrammeerde paden zoals
D:\Automation\Sales.xlsZorg ervoor dat het script op andere machines niet werkt. Stel het pad samen op basis van een omgevingsvariabele, zodat hetzelfde script op elke agent wordt uitgevoerd. - Samengevoegde cellen en meerdere koptekstrijen. De import vereist precies รฉรฉn kopregel met unieke namen. Samengevoegde cellen resulteren in lege of dubbele parameternamen.
- Schending van de gegevensdeling bij export. Het bestemmingsbestand kan niet in Excel worden geopend.
ExportVoert het programma uit. Sluit het eerst af, of exporteer het naar een bestand met een tijdstempel.
Een nuttige gewoonte is om COM-opschoning in een wrapper te plaatsen. On Error Resume Next Het blok is geplaatst in een speciale herstelfunctie, zodat Excel nog steeds afsluit bij een fout midden in het script. Wanneer Excel-gegevens een formele functie voeden, testcase Voor de repository geldt dezelfde discipline voor de resultaten: exporteer eenmaal, controleer of het bestand bestaat en voeg het vervolgens toe aan de run.
Om dieper in te gaan op de hier besproken onderwerpen, kunt u het volledige document doornemen. QTP/UFT zelfstudie Leer binnen het bredere kader hoe je resultaten kunt doorvoeren. ALM van UFT, herhaal de basisprincipes in software testenen vergelijk de aanpak met datagestuurde scripting in Selenium.






