Sådan importerer, læser og ændrer du data fra Excel i QTP/UFT
⚡ Smart opsummering
Import, læsning og ændring af data fra Excel i QTP/UFT er afhængig af det indbyggede DataTable-objekt, som indlæser en projektmappe i runtime-datatabellen, så hvert automatiseringsscript kan køre testtrin fra regnearksrækker.

Regneark er fortsat det mest almindelige sted, hvor testere opbevarer deres inputværdier, forventede resultater og miljøindstillinger. QTP, nu solgt som OpenText UFT En efter at produktet flyttede fra HP til Micro Focus og derefter til OpenText, læser disse regneark via DataTable-objektet. Afsnittene nedenfor viser de nøjagtige sætninger, der bruges til at importere en projektmappe, tælle dens rækker, læse individuelle celler, ændre værdier og skrive arket tilbage til disken.
Trin til at importere, læse, ændre data fra EXCEL
Overvej at du vil importere følgende Salg.xls arbejdsbogen i din prøve.
Når filen er importeret til UFT, bliver den øverste række kolonneoverskriften, så strukturer dine data i overensstemmelse hermed. Alt i række 1 behandles som et parameternavn i stedet for testdata, og hver resterende række tælles som en datarække.
Syntaksen til at importere en hel Excel-fil er vist nedenfor.
DataTable.Import(FileName)
I vores tilfælde bliver sætningen følgende. VBScript behøver ikke parenteser, når en metode kaldes som en sætning, så den almindelige form bruges her.
DataTable.Import "D:\Automation\Sales.xls"
Efter kørslen vises de importerede rækker i dataruden under kørsel præcis som de blev lagt ud i projektmappen.
Syntaksen til at importere et bestemt ark vises nedenfor. SheetSource er arket inde i projektmappen, og SheetDest er destinationsarket i kørselsdatatabellen.
DataTable.ImportSheet FileName, SheetSource, SheetDest
Brug HentRækkeAntal metode til at finde antallet af datarækker i et ark. Hver sætning skal stå på sin egen linje.
DataTable.Import "D:\Automation\Sales.xls" row = DataTable.GetSheet(1).GetRowCount MsgBox row
Den viste meddelelsesboks viser rækketotalen for det importerede ark.
For at flytte markøren til en bestemt række skal du bruge SætAktuelRække metode. Det andet argument i DataTable.Value er arknummeret, ikke rækkenummeret, hvilket er grunden til, at rækkemarkøren skal flyttes separat.
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
Begge værdier læses fra den samme kolonne, men fra to forskellige rækker, og meddelelsesboksen udskriver dem side om side.
Brug Værdi metoden til venstre for en opgave for at ændre data i det importerede ark. Ændringen forbliver i hukommelsen, indtil du kalder eksport, som skriver kørselsdatatabellen tilbage til en Excel-fil.
DataTable.SetCurrentRow 1 DataTable.Value("Year", 1) = 2026 DataTable.Export "D:\Automation\Sales_Updated.xls"
Den redigerede celle er synlig i dataruden under kørsel lige efter at tildelingen er kørt.
Åbning af den eksporterede projektmappe bekræfter, at de ændrede værdier blev gemt på disken i stedet for kun at være bevaret i løbet af kørslen.
💡 Tip: Eksportér til et andet filnavn end det, du importerede. At skrive tilbage til den samme åbne projektmappe er den hurtigste måde at udløse en delingsfejl og miste kørslen på.
Sådan læser, ændrer og eksporterer du Excel-data: Et komplet eksempel
Uddragene ovenfor demonstrerer hver især én metode. I en rigtig datadrevet test kombineres de i et enkelt loop, der gennemgår hver række, beregner noget, gemmer resultatet og eksporterer arket. Antag projektmappen Salg.xls indeholder de følgende fire kolonner og tre datarækker.
| År | Område | Enheder | Pris |
|---|---|---|---|
| 2023 | Øst | 120 | 25 |
| 2024 | Øst | 150 | 25 |
| 2025 | Vest | 200 | 30 |
Skriptet nedenfor tilføjer en Revenue kolonne, udfylder den række for række, holder en løbende total og skriver det færdige ark til en ny fil. AddParameter bruges fordi kolonnen ikke findes i kildeprojektmappen; kald af den for en kolonne, der allerede findes, giver en fejl.
' 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
Tre punkter i dette manuskript er vigtigere end resten. For det første, GetRowCount returnerer 3 i stedet for 4, fordi overskriftsrækken bruges som kolonnenavne. For det andet, SetCurrentRow kaldes øverst i hver iteration; uden den ville alle tre iterationer læse den samme række. For det tredje er værdier, der kommer ud af datatabellen, strenge, så CInt anvendes før multiplikationen for at undgå strengsammenkædning i stedet for aritmetik. Spring overping DataTable.Export ville efterlade den beregnede omsætning synlig i datapuden, men fraværende fra nogen filer på disken.
DataTable-objekt vs. Excel COM-objekt i UFT
DataTable-objektet er ikke den eneste måde at få adgang til et regneark. UFT scripts kan også oprette en Excel.Application COM-objekt og køre Excel direkte. De to tilgange løser forskellige problemer.
| Aspect | DataTable-objekt | Excel COM-objekt |
|---|---|---|
| Excel-installation | Ikke påkrævet på udførelsesmaskinen | Microsoft Excel skal være installeret |
| Adresseringsstil | Efter kolonnenavn og rækkepeger | Efter cellekoordinater, områder eller navngivne områder |
| gentagelser | Rækker driver automatisk test iterationer | Intet link til iterationer; looping er manuel |
| Formatering og formler | Ignoreret; kun værdier læses | Fuld adgang til formler, farver og diagrammer |
| Flere arbejdsbøger | Én runtime-tabel, ark importeret ét ad gangen | Et hvilket som helst antal arbejdsbøger åbne på én gang |
| Resultatrapportering | Værdier vises i UFT kør resultater automatisk | Intet bliver registreret, medmindre du selv anmelder det |
| Oprydningsbyrde | Håndteres af UFT | Du skal lukke, afslutte og frigive alle objekter |
Den praktiske regel er enkel. Brug DataTable-objektet til ligefrem parameterisering, hvor hver række i regnearket bliver én iteration af en automatiseringstest Kør. Skift kun til COM-objektet, når du har brug for noget, som datatabellen ikke kan udtrykke, f.eks. at læse et formelresultat, skrive en formateret rapport eller sammenligne to projektmapper i det samme script. Eksemplet nedenfor læser én celle, skriver en status tilbage og lukker Excel korrekt ned.
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
Celle A2 indeholder 2023, fordi række 1 i regnearket er overskriftsrækken, og kolonne A er ÅrBemærk at COM-adressering er én-baseret og tæller headeren, hvorimod DataTable.SetCurrentRow 1 punkter på den første datarække.
Almindelige fejl ved brug af Excel med UFT og hvordan man fikser dem
De fleste Excel-problemer i UFT stammer fra et lille sæt gentagne fejl. At genkende dem sparer en masse fejlfindingstid.
⚠️ Advarsel: En forældreløs EXCEL.EXE-proces er den mest almindelige bivirkning af COM-automatisering. Hver CreateObject("Excel.Application") der ikke matches af Quit plus Set … = Nothing efterlader en skjult Excel-instans kørende. Efter et par hundrede testkørsler er udførelsesmaskinen løbet tør for hukommelse, og kildeprojektmappen er låst for redigering.
- Excel forbliver i hukommelsen. Luk projektmappen, ring
xlApp.Quit, og frigiv derefter arket, projektmappen og applikationsobjekterne i den rækkefølge. Når applikationen først frigives, efterlades der en aktiv reference, og processen holdes i gang. - Ændringerne forsvinder efter løbet.
DataTable.Valueskriver kun til runtime-datatabellen. UdenDataTable.Export, intet når filsystemet. - "Kolonnen findes ikke" eller en ugyldig parameterfejl. Kolonnenavnet blev overført til
DataTable.Valueskal matche headercellen nøjagtigt, inklusive efterfølgende mellemrum.AddParameterat oprette en kolonne, før der skrives til den. - Hver iteration læser de samme værdier.
SetCurrentRowblev ikke kaldt inde i løkken, så rækkemarkøren flyttede sig aldrig. - Der tælles én række væk.
GetRowCountekskluderer overskriftsrækken. En projektmappe med en overskrift og ti poster returnerer 10, ikke 11. - Sti- og tilladelsesfejl. Hardkodede stier som f.eks.
D:\Automation\Sales.xlspause på andre maskiner. Byg stien fra en miljøvariabel, så det samme script kører på alle agenter. - Sammenflettede celler og flere overskriftsrækker. Importen forventer præcis én overskriftsrække med unikke navne. Sammenflettede celler producerer tomme eller duplikerede parameternavne.
- Overtrædelse af delingsregler ved eksport. Destinationsfilen kan ikke åbnes i Excel, mens
Exportkører. Luk den først, eller eksporter til et tidsstemplet filnavn.
En nyttig vane er at pakke COM-oprydning ind i en On Error Resume Next blok placeret i en dedikeret gendannelsesfunktion, så en fejl midt i et script stadig lukker Excel ned. Når Excel-data føder en formel test sag I repository gælder den samme disciplin for resultater: eksporter én gang, bekræft at filen findes, og vedhæft den derefter til kørslen.
For at komme videre med de emner, der er berørt her, skal du gennemgå hele QTP/UFT tutorial for den bredere ramme, lær hvordan du presser resultater ind i ALM fra UFT, gennemgå det grundlæggende i software testog sammenlign tilgangen med datadrevet scripting i Selenium.






