Hogyan importáljunk, olvassunk és módosítsunk adatokat az EXCEL-ből? QTP/UFT

⚡ Okos összefoglaló

Adatok importálása, olvasása és módosítása az Excelből QTP/UFT a beépített DataTable objektumra támaszkodik, amely betölt egy munkafüzetet a futásidejű adattáblába, így minden automatizálási szkript a táblázat soraiból vezérelheti a tesztelési lépéseket.

  • 📥 import: A DataTable.Import egy teljes munkafüzetet tölt be, míg a DataTable.ImportSheet egy elnevezett munkalapot húz be a kiválasztott célmunkalapba.
  • 🗂️ Fejléc szabály: A táblázat első sora lesz az oszlopnevek, ezért az importálás futtatása előtt strukturálja a táblázatot.
  • 🔢 Sorok száma: A DataTable.GetSheet(1).GetRowCount visszaadja az adatsorok számát, és kizárja a fejlécsort.
  • 🎯 Sormutató: Minden beolvasás előtt hívd meg a DataTable.SetCurrentRow függvényt, így a DataTable.Value a várt cellát adja vissza.
  • ✏️ Írj vissza: A DataTable.Value függvényhez rendelt érték csak a memóriában lévő cellát módosítja; a DataTable.Export a munkalapot lemezre menti.
  • 🧩 COM opció: Hozzon létre egy Excel.Application objektumot, ha formázásra, képletekre vagy több megnyitott munkafüzetre van szükség.
  • ⚠️ Tisztítás: Mindig hívd meg a Quit parancsot és engedd fel az objektumokat, különben az EXCEL.EXE rezidens marad és zárolja a fájlt.

Hogyan importáljunk, olvassunk és módosítsunk adatokat az Excelből? QTP/UFT

A táblázatok továbbra is a leggyakoribb helyek, ahol a tesztelők tárolják a bemeneti értékeiket, a várható eredményeket és a környezeti beállításokat. QTP, most úgy eladó, mint OpenText UFT Egyszer azután, hogy a termék a HP-től a Micro Focushoz, majd a ...-hoz került. OpenText, a DataTable objektumon keresztül olvassa be ezeket a táblázatokat. Az alábbi szakaszok bemutatják a munkafüzet importálásához, sorainak megszámlálásához, az egyes cellák beolvasásához, az értékek módosításához és a munkalap lemezre való visszaírásához használt pontos utasításokat.

Lépések az adatok importálásához, olvasásához és módosításához az EXCEL programból

Gondolja át, hogy a következőket szeretné importálni: Értékesítés.xls munkafüzetet a tesztedbe.

Sales.xls forrásmunkafüzet megnyitva az Excelben az importálás előtt UFT

Miután a fájl importálva lett a UFT, a felső sor lesz az oszlopfejléc, ezért ennek megfelelően strukturálja az adatokat. Az 1. sorban található bármit paraméternévként kezel a rendszer, nem pedig tesztadatként, és minden fennmaradó sort adatsorként számol.

Egy teljes Excel fájl importálásának szintaxisa az alábbiakban látható.

DataTable.Import(FileName)

Esetünkben az utasítás a következőképpen alakul. A VBScriptben nincs szükség zárójelekre, amikor egy metódust utasításként hívunk meg, ezért itt a sima formát használjuk.

DataTable.Import "D:\Automation\Sales.xls"

A futtatás után az importált sorok pontosan úgy jelennek meg a futásidejű Adatok ablaktáblában, ahogyan a munkafüzetben elrendezték őket.

Importált értékesítési adatok jelennek meg a UFT futásidejű adattábla ablaktábla

A következő lépésben egy adott munkalap importálásának szintaxisa látható. SheetSource a munkafüzetben található lap, és SheetDest a céllap a futásidejű adattáblában.

DataTable.ImportSheet FileName, SheetSource, SheetDest

Használja a Sorszám lekérése metódus a munkalap adatsorainak számának lekérésére. Minden utasításnak külön sorban kell lennie.

DataTable.Import "D:\Automation\Sales.xls"
row = DataTable.GetSheet(1).GetRowCount
MsgBox row

A megjelenő üzenetmező az importált munkalap sorainak összegét mutatja.

msgBox a GetRowCount eredményének megjelenítése az importált értékesítési táblázathoz

A mutató adott sorra helyezéséhez használja a Aktuális sor beállítása metódus. A második argumentum DataTable.Value a munkalap száma, nem a sor száma, ezért a sormutatót külön kell mozgatni.

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

Mindkét érték ugyanabból az oszlopból, de két különböző sorból kerül beolvasásra, és az üzenetmező egymás mellett nyomtatja ki őket.

msgBox az adattábla 1. és 2. sorának Year értékének összehasonlítása

Használja a Érték: metódus egy hozzárendelés bal oldalán az importált munkalap adatainak módosításához. A módosítás a memóriában marad, amíg meg nem hívja a metódust. Export, amely a futásidejű adattáblát visszaírja egy Excel-fájlba.

DataTable.SetCurrentRow 1
DataTable.Value("Year", 1) = 2026
DataTable.Export "D:\Automation\Sales_Updated.xls"

A szerkesztett cella a hozzárendelés futtatása után azonnal látható a futásidejű Adatok ablaktáblában.

Futásidejű adattábla, amely egy, a DataTable.Value metóduson keresztül frissített cellát mutat

Az exportált munkafüzet megnyitásával megerősíthető, hogy a módosított értékek lemezre lettek mentve, nem pedig csak a futtatás időtartamára maradtak meg.

Az exportált Excel-fájl megnyitva az Excelben, amely a DataTable.Export által mentett módosított értékeket mutatja

💡 Tipp: Exportáljon egy másik fájlnévvel, mint amelyikkel importálta. Ugyanabba a megnyitott munkafüzetbe való visszaírás a leggyorsabb módja a megosztási szabálysértés kiváltásának és a futtatás elvesztésének.

Excel-adatok olvasása, módosítása és exportálása: Teljes példa

A fenti kódrészletek egy-egy metódust mutatnak be. Egy valós adatvezérelt tesztben ezeket egyetlen ciklusba egyesítik, amely minden soron végigmegy, kiszámít valamit, tárolja az eredményt, és exportálja a munkalapot. Tegyük fel, hogy a munkafüzet Értékesítés.xls a következő négy oszlopot és három adatsort tartalmazza.

Év Vidék Egységek Ár:
2023 Keleti 120 25
2024 Keleti 150 25
2025 Nyugati 200 30

Az alábbi szkript hozzáad egy Revenue oszlopot, sorról sorra kitölti, folyamatosan összegzi az eredményt, és a kész munkalapot egy új fájlba írja. AddParameter azért használatos, mert az oszlop nem létezik a forrás munkafüzetben; egy már létező oszlop meghívása hibát okoz.

' 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

Három pont számít jobban ebben a forgatókönyvben, mint a többi. Először is, GetRowCount 3-at ad vissza 4 helyett, mivel a fejlécsor oszlopnevekként kerül felhasználásra. Másodszor, SetCurrentRow minden iteráció tetején meghívódik; enélkül mindhárom iteráció ugyanazt a sort olvasná be. Harmadszor, az adattáblából kijövő értékek karakterláncok, tehát CInt a szorzás előtt kerül alkalmazásra, hogy elkerülje a karakterláncok összefűzését a számtani művelet helyett.ping DataTable.Export a kiszámított bevétel látható maradna az Adatok panelen, de hiányozna a lemezen lévő fájlokból.

DataTable objektum vs. Excel COM objektum UFT

A DataTable objektum nem az egyetlen módja a táblázatkezelő elérésének. UFT szkriptek is létrehozhatnak Excel.Application COM objektum és közvetlenül az Excel futtatható. A két megközelítés különböző problémákat old meg.

Aspect DataTable objektum Excel COM objektum
Excel telepítése Nem szükséges a végrehajtó gépen Microsoft Telepíteni kell az Excelt
Címzési stílus Oszlopnév és sormutató alapján Cellakoordináták, tartományok vagy elnevezett tartományok szerint
Iterációk A sorok automatikusan vezérlik a teszt iterációkat Nincs link az iterációkhoz; looping manuális
Formázás és képletek Figyelmen kívül hagyva; csak az értékek kerülnek beolvasásra Teljes hozzáférés a képletekhez, színekhez és diagramokhoz
Több munkafüzet Egy futásidejű tábla, a lapok egyenként importálhatók Tetszőleges számú munkafüzet megnyitása egyszerre
Eredményjelentés Az értékek megjelennek a UFT eredmények automatikus futtatása Semmi sem kerül rögzítésre, hacsak te magad nem jelented be
Takarítási teher Által kezelve UFT Minden objektumot be kell zárnod, ki kell lépned és el kell engedned.

A gyakorlati szabály egyszerű. Használd a DataTable objektumot az egyszerű paraméterezéshez, ahol minden táblázatsor egy iterációvá válik. automatizálási tesztelés futtatás. Csak akkor váltson a COM objektumra, ha olyasmire van szüksége, amit az adattábla nem tud kifejezni, például képlet eredményének beolvasásához, formázott jelentés írásához vagy két munkafüzet összehasonlításához ugyanabban a szkriptben. Az alábbi példa beolvas egy cellát, visszaír egy állapotot, és megfelelően leállítja az Excelt.

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

Az A2 cella tartalmazza a 2023-as számot, mivel a munkalap 1. sora a fejlécsor, az A oszlop pedig a ÉvFigyeljük meg, hogy a COM címzés egy alapú, és a fejlécet számolja, míg DataTable.SetCurrentRow 1 pont az első adatsorban.

Gyakori hibák az Excel használatakor UFT és Hogyan javítsuk ki őket

A legtöbb Excel-probléma UFT kis számú, ismétlődő hibából származnak. Felismerésük rengeteg hibakeresési időt takarít meg.

⚠️ Figyelmeztetés: Az árva EXCEL.EXE folyamat a COM-automatizálás leggyakoribb mellékhatása. Minden CreateObject("Excel.Application") ami nem egyezik meg Quit plusz Set … = Nothing egy rejtett Excel-példányt hagy futni. Néhány száz tesztfuttatás után a végrehajtó gépnek megtelt a memóriája, és a forrásmunkafüzet szerkesztésre zárolva lesz.

  • Az Excel a memóriában marad. Zárja be a munkafüzetet, hívja fel xlApp.Quit, majd engedje fel a munkalap, a munkafüzet és az alkalmazás objektumait ebben a sorrendben. Az alkalmazás első felengedése élő hivatkozást hagy, és életben tartja a folyamatot.
  • A változások a futás után eltűnnek. DataTable.Value csak a futásidejű adattáblába ír. Nélkül DataTable.Exportsemmi sem jut el a fájlrendszerbe.
  • „Az oszlop nem létezik” vagy érvénytelen paraméterhiba. Az oszlop neve átadva a következőnek: DataTable.Value pontosan meg kell egyeznie a fejléccellával, beleértve a záró szóközöket is. Használja AddParameter hogy írás előtt létrehozzon egy oszlopot.
  • Minden iteráció ugyanazokat az értékeket olvassa. SetCurrentRow nem lett meghívva a cikluson belül, így a sormutató soha nem mozdult el.
  • Egyel eltérő sorok száma. GetRowCount kizárja a fejlécsort. Egy fejléccsel és tíz rekorddal rendelkező munkafüzet 10-et ad vissza, nem 11-et.
  • Elérési út és engedélyezési hibák. Fixen kódolt elérési utak, mint például D:\Automation\Sales.xls megszakítás más gépeken. Építsd fel az elérési utat egy környezeti változóból, hogy ugyanaz a szkript fusson minden ügynökön.
  • Egyesített cellák és több fejlécsor. Az importálás pontosan egy, egyedi neveket tartalmazó fejlécsort vár. Az egyesített cellák üres vagy ismétlődő paraméterneveket eredményeznek.
  • Megosztási szabálysértés exportáláskor. A célfájl nem nyitható meg Excelben, amíg a Export fut. Először zárja be, vagy exportálja időbélyeggel ellátott fájlnévbe.

Hasznos szokás a COM-tisztítást egy On Error Resume Next a blokk egy erre a célra létrehozott helyreállítási függvénybe kerül, így egy szkript közbeni hiba esetén is leáll az Excel. Amikor az Excel adatai formális próbaper A repository esetében ugyanaz a szabály vonatkozik az eredményekre: exportáld egyszer, ellenőrizd a fájl létezését, majd csatold a futtatáshoz.

A már érintett témák további megértéséhez dolgozza át a teljes QTP/UFT oktatói a tágabb keretrendszerhez, tanulja meg, hogyan lehet az eredményeket a ALM innen UFT, tekintse át az alapokat a szoftver tesztelés, és hasonlítsa össze a megközelítést az adatvezérelt szkripteléssel a Selenium.

GYIK

UFT .xls, .xlsx és .csv fájlokat importál a futásidejű adattáblába. Az exportálás mindig .xls munkafüzetet eredményez, ezért konverterre vagy az Excel COM objektumra van szükség, ha a downstream rendszernek az újabb .xlsx formátumra van szüksége.

A tervezési idő tábla a teszttel együtt mentésre kerül, és változatlan marad. A futásidejű tábla a végrehajtás indításakor létrejövő másolat. Az importálások és az érték-hozzárendelések csak a futásidejű másolatra vonatkoznak, amely elvész, hacsak nem exportálják.

Nem a DataTable objektumra, amely magát a munkafüzetet elemzi. Igen minden olyan szkriptre, amely meghívja a CreateObject(„Excel.Application”) függvényt, mivel ez az útvonal automatizál egy valódi Excel-példányt, és azonnal leáll egy olyan gépen, amelyen nincs ilyen útvonal.

Igen. Hívja meg az ImportSheet függvényt munkalaponként egyszer, minden alkalommal más céllapnévvel. A globális adatok a globális munkalaphoz tartoznak, míg a műveletspecifikus értékek a megfelelő műveletlaphoz, így az iterációk függetlenek maradnak.

Igen, és a ciklusváz általában helyes. Két dolgot ellenőrizhetsz kézzel: hogy a SetCurrentRow a cikluson belül van-e, és hogy a numerikus cellák CInt vagy CDbl segítségével konvertálódnak-e. A generált kód gyakran mindkettőt kihagyja.

A modern mesterséges intelligencia funkciói UFT Az egyik feloldja a vizuálisan felismerő vezérlőket, így az átnevezett mezők már nem törik meg az adathalmaz minden sorát. A mesterséges intelligencia további határoló sorokat is javasolhat, szélesítve a táblázat lefedettségét manuális teszttervezés nélkül.

Foglald össze ezt a bejegyzést a következőképpen: