Hur man importerar, läser och ändrar data från Excel i QTP/UFT
⚡ Smart sammanfattning
Importera, läsa och ändra data från Excel i QTP/UFT förlitar sig på det inbyggda DataTable-objektet, som laddar en arbetsbok i datatabellen under körning så att varje automatiseringsskript kan driva teststeg från kalkylbladsrader.

Kalkylblad är fortfarande den vanligaste platsen där testare lagrar sina indatavärden, förväntade resultat och miljöinställningar. QTP, säljs nu som OpenText UFT En efter att produkten flyttades från HP till Micro Focus och sedan till OpenText, läser dessa kalkylblad via DataTable-objektet. Avsnitten nedan visar de exakta satserna som används för att importera en arbetsbok, räkna dess rader, läsa enskilda celler, ändra värden och skriva tillbaka arket till disken.
Steg för att importera, läsa, ändra data från EXCEL
Tänk på att du vill importera följande Försäljning.xls arbetsboken i ditt prov.
När filen har importerats till UFT, den översta raden blir kolumnrubrik, så strukturera dina data därefter. Allt på rad 1 behandlas som ett parameternamn snarare än som testdata, och varje återstående rad räknas som en datarad.
Syntaxen för att importera en hel Excel-fil visas nedan.
DataTable.Import(FileName)
I vårt fall blir satsen följande. VBScript behöver inte parenteser när en metod anropas som en sats, så den vanliga formen används här.
DataTable.Import "D:\Automation\Sales.xls"
Efter körningen visas de importerade raderna i datafönstern under körning exakt som de var upplagda i arbetsboken.
Syntaxen för att importera ett specifikt ark visas härnäst. SheetSource är arket inuti arbetsboken och SheetDest är målarket i datatabellen under körning.
DataTable.ImportSheet FileName, SheetSource, SheetDest
Använd GetRodCount metod för att få antalet datarader i ett ark. Varje sats måste stå på en egen rad.
DataTable.Import "D:\Automation\Sales.xls" row = DataTable.GetSheet(1).GetRowCount MsgBox row
Meddelanderutan som visas visar radtotalen för det importerade arket.
För att flytta pekaren till en specifik rad, använd Ange aktuell rad metod. Det andra argumentet för DataTable.Value är arknumret, inte radnumret, vilket är anledningen till att radpekaren måste flyttas 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
Båda värdena läses från samma kolumn men från två olika rader, och meddelanderutan skriver ut dem sida vid sida.
Använd Värderar metod till vänster om en uppgift för att ändra data i det importerade arket. Ändringen finns kvar i minnet tills du anropar Export, som skriver tillbaka datatabellen under körning till en Excel-fil.
DataTable.SetCurrentRow 1 DataTable.Value("Year", 1) = 2026 DataTable.Export "D:\Automation\Sales_Updated.xls"
Den redigerade cellen visas i datarutan under körning direkt efter att tilldelningen körts.
Att öppna den exporterade arbetsboken bekräftar att de ändrade värdena sparades på disken istället för att bara behållas under körningens varaktighet.
💡 Tips: Exportera till ett annat filnamn än det du importerade. Att skriva tillbaka till samma öppna arbetsbok är det snabbaste sättet att utlösa ett delningsfel och förlora körningen.
Hur man läser, ändrar och exporterar Excel-data: Ett komplett exempel
Utdragen ovan demonstrerar var och en en metod. I ett verkligt datadrivet test kombineras de till en enda loop som går igenom varje rad, beräknar något, lagrar resultatet och exporterar arket. Anta att arbetsboken Försäljning.xls innehåller följande fyra kolumner och tre datarader.
| År | Region | Enheter | Pris |
|---|---|---|---|
| 2023 | öster | 120 | 25 |
| 2024 | öster | 150 | 25 |
| 2025 | väster | 200 | 30 |
Skriptet nedan lägger till en Intäkter kolumnen, fyller den rad för rad, har en löpande summa och skriver det färdiga arket till en ny fil. AddParameter används eftersom kolumnen inte finns i källarbetsboken; att anropa den för en kolumn som redan finns ger upphov till ett fel.
' 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
Produktion:
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 det här manuset är viktigare än resten. För det första, GetRowCount returnerar 3 snarare än 4 eftersom rubrikraden används som kolumnnamn. För det andra, SetCurrentRow anropas högst upp i varje iteration; utan den skulle alla tre iterationerna läsa samma rad. För det tredje är värden som kommer ut ur datatabellen strängar, så CInt tillämpas före multiplikationen för att undvika strängsammanfogning istället för aritmetik.ping DataTable.Export skulle lämna den beräknade intäkten synlig i datafönstern men frånvarande från alla filer på disken.
DataTable-objekt kontra Excel COM-objekt i UFT
DataTable-objektet är inte det enda sättet att nå ett kalkylblad. UFT skript kan också skapa en Excel.Application COM-objekt och kör Excel direkt. De två metoderna löser olika problem.
| Aspect | DataTable-objekt | Excel COM-objekt |
|---|---|---|
| Excel-installation | Krävs inte på exekveringsmaskinen | Microsoft Excel måste vara installerat |
| Adresseringsstil | Efter kolumnnamn och radpekare | Efter cellkoordinater, intervall eller namngivna intervall |
| Iterationer | Rader driver testiterationer automatiskt | Ingen länk till iterationer; looping är manuell |
| Formatering och formler | Ignoreras; endast värden läses | Full åtkomst till formler, färger och diagram |
| Flera arbetsböcker | En körtidstabell, ark importeras ett i taget | Valfritt antal arbetsböcker öppna samtidigt |
| Resultatrapportering | Värden visas i UFT kör resultaten automatiskt | Ingenting registreras om du inte själv rapporterar det |
| Städbörda | Hanteras av UFT | Du måste stänga, avsluta och släppa alla objekt |
Den praktiska regeln är enkel. Använd DataTable-objektet för enkel parametrisering, där varje kalkylbladsrad blir en iteration av en automatiseringstestning kör. Växla bara till COM-objektet när du behöver något som datatabellen inte kan uttrycka, till exempel att läsa ett formelresultat, skriva en formaterad rapport eller jämföra två arbetsböcker i samma skript. Exemplet nedan läser en cell, skriver tillbaka en status och stänger Excel korrekt.
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
Produktion:
Cell A2 contains: 2023
Cell A2 innehåller 2023 eftersom rad 1 i kalkylbladet är rubrikraden och kolumn A är ÅrObservera att COM-adressering är en-baserad och räknar headern, medan DataTable.SetCurrentRow 1 punkter på den första dataraden.
Vanliga fel när man använder Excel med UFT och hur man fixar dem
De flesta Excel-problem i UFT kommer från en liten uppsättning upprepade misstag. Att identifiera dem sparar mycket tid vid felsökning.
⚠️ Varning: En föräldralös EXCEL.EXE-process är den enskilt vanligaste bieffekten av COM-automation. Varje CreateObject("Excel.Application") som inte matchas av Quit plus Set … = Nothing lämnar en dold Excel-instans igång. Efter några hundra testkörningar har kördatorn slut på minne och källarbetsboken är låst för redigering.
- Excel finns kvar i minnet. Stäng arbetsboken, ring
xlApp.Quitoch släpp sedan ark-, arbetsboks- och programobjekten i den ordningen. Om du släpper programmet först lämnas en aktiv referens kvar och processen fortsätter att fungera. - Ändringarna försvinner efter körningen.
DataTable.Valueskriver endast till datatabellen vid körning. UtanDataTable.Export, ingenting når filsystemet. - ”Kolumnen finns inte” eller ett ogiltigt parameterfel. Kolumnnamnet som skickades till
DataTable.Valuemåste matcha rubrikcellen exakt, inklusive efterföljande mellanslag. AnvändAddParameterför att skapa en kolumn innan man skriver till den. - Varje iteration läser samma värden.
SetCurrentRowanropades inte inuti loopen, så radpekaren rörde sig aldrig. - Radförskjutning räknas.
GetRowCountexkluderar rubrikraden. En arbetsbok med en rubrik och tio poster returnerar 10, inte 11. - Sökvägs- och behörighetsfel. Hårdkodade sökvägar som t.ex.
D:\Automation\Sales.xlspaus på andra maskiner. Bygg sökvägen från en miljövariabel så att samma skript körs på varje agent. - Sammanfogade celler och flera rubrikrader. Importen förväntar sig exakt en rubrikrad med unika namn. Sammanfogade celler producerar tomma eller duplicerade parameternamn.
- Delningsöverträdelse vid export. Målfilen kan inte öppnas i Excel medan
Exportkörs. Stäng den först, eller exportera till ett tidsstämplat filnamn.
En bra vana är att linda in COM-rensningen i en On Error Resume Next block placerat i en dedikerad återställningsfunktion, så ett fel mitt i ett skript stänger fortfarande av Excel. När Excel-data matar en formell testfall repository gäller samma disciplin för resultat: exportera en gång, verifiera att filen finns och bifoga den sedan till körningen.
För att gå vidare med de ämnen som berörs här, arbeta dig igenom hela QTP/UFT handledning för det bredare ramverket, lär dig hur du kan driva resultat in i ALM från UFT, granska grunderna i mjukvarutestningoch jämföra metoden med datadriven skriptning i Selenium.






