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.

  • ๐Ÿ“ฅ Importeren: DataTable.Import laadt een volledige werkmap, terwijl DataTable.ImportSheet รฉรฉn benoemd werkblad naar een gekozen bestemmingswerkblad importeert.
  • ๐Ÿ—‚๏ธ Kopregel: De eerste rij van het spreadsheet wordt de kolomnaam, dus structureer het spreadsheet voordat de import wordt uitgevoerd.
  • ๐Ÿ”ข Aantal rijen: DataTable.GetSheet(1).GetRowCount retourneert het aantal gegevensrijen en sluit de kopregel uit.
  • ๐ŸŽฏ Rijwijzer: Roep DataTable.SetCurrentRow aan vรณรณr elke leesbewerking, zodat DataTable.Value de cel retourneert die je verwacht.
  • โ€‹ Schrijf terug: Door een waarde toe te wijzen aan DataTable.Value wordt een cel alleen in het geheugen gewijzigd; DataTable.Export slaat het werkblad op de schijf op.
  • ๐Ÿงฉ COM-optie: Maak een Excel.Application-object aan wanneer opmaak, formules of meerdere geopende werkmappen nodig zijn.
  • โš ๏ธ Opruimen: Roep altijd Quit aan en geef objecten vrij, anders blijft EXCEL.EXE actief en vergrendelt het bestand.

Hoe importeer, lees en wijzig ik gegevens vanuit Excel? QTP/UFT

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.

Het bronwerkblad Sales.xls werd in Excel geopend voordat het werd geรฏmporteerd. UFT

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.

Geรฏmporteerde verkoopgegevens weergegeven in de UFT runtime Data Table-venster

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.

MsgBox Het resultaat van GetRowCount weergeven voor het geรฏmporteerde verkoopblad.

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.

MsgBox Het jaartal van rij 1 en rij 2 van de gegevenstabel vergelijken.

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.

Een runtime-datatabel die een cel toont die is bijgewerkt via de DataTable.Value-methode.

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.

Het geรซxporteerde Excel-bestand is geopend in Excel en toont de gewijzigde waarden die zijn opgeslagen door DataTable.Export.

๐Ÿ’ก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.Value schrijft alleen naar de runtime-datatabel. Zonder DataTable.ExportEr komt niets in het bestandssysteem terecht.
  • "De kolom bestaat niet" of een ongeldige parameterfout. De kolomnaam die is doorgegeven aan DataTable.Value moet exact overeenkomen met de koptekstcel, inclusief spaties aan het einde. Gebruik AddParameter Een kolom aanmaken voordat je erin schrijft.
  • Elke iteratie leest dezelfde waarden. SetCurrentRow De functie werd niet binnen de lus aangeroepen, waardoor de rijaanwijzer nooit verplaatst werd.
  • Een verschil van รฉรฉn rij telt mee. GetRowCount De kopregel wordt uitgesloten. Een werkmap met een kopregel en tien records retourneert 10, niet 11.
  • Pad- en toegangsfouten. Voorgeprogrammeerde paden zoals D:\Automation\Sales.xls Zorg 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. Export Voert 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.

Veelgestelde vragen

UFT Importeert .xls-, .xlsx- en .csv-bestanden in de runtime-datatabel. Exporteren produceert altijd een .xls-werkmap, dus een converter of het Excel COM-object is nodig wanneer het downstream-systeem het nieuwere .xlsx-formaat vereist.

De ontwerptabel wordt samen met de test opgeslagen en blijft ongewijzigd. De runtimetabel is een kopie die wordt aangemaakt wanneer de uitvoering start. Importen en waardetoewijzingen hebben alleen invloed op de runtimekopie, die wordt verwijderd tenzij deze wordt geรซxporteerd.

Nee voor het DataTable-object, dat het werkblad zelf parseert. Ja voor elk script dat CreateObject("Excel.Application") aanroept, omdat die methode een echte Excel-instantie automatiseert en direct mislukt op een computer zonder een dergelijke instantie.

Ja. Roep ImportSheet รฉรฉn keer per blad aan met telkens een andere naam voor het bestemmingsblad. Globale gegevens horen op het Global-blad, terwijl actiespecifieke waarden op het bijbehorende actieblad thuishoren, zodat de iteraties onafhankelijk van elkaar blijven.

Ja, en de lusstructuur is meestal correct. Controleer handmatig twee dingen: of SetCurrentRow zich binnen de lus bevindt en of numerieke cellen worden geconverteerd met CInt of CDbl. Generatiecode laat beide vaak weg.

AI-functies in moderne UFT In de nieuwste versies worden besturingselementen visueel herkend, waardoor een hernoemd veld niet langer elke rij van een dataset verstoort. AI kan ook extra grensrijen voorstellen, waardoor de dekking van spreadsheets wordt uitgebreid zonder dat handmatig testen hoeft te worden ontworpen.

Vat dit bericht samen met: