Jak importovat, číst a měnit data z aplikace Excel v QTP/UFT

⚡ Chytré shrnutí

Import, čtení a změna dat z Excelu v QTP/UFT spoléhá na vestavěný objekt DataTable, který načte sešit do datové tabulky za běhu, takže každý automatizační skript může řídit testovací kroky z řádků tabulky.

  • 📥 Import: Metoda DataTable.Import načte celý sešit, zatímco metoda DataTable.ImportSheet načte jeden pojmenovaný list do vybraného cílového listu.
  • 🗂️ Pravidlo záhlaví: První řádek tabulky se stane názvy sloupců, proto je třeba list před importem strukturovat.
  • 🔢 Počet řádků: Funkce DataTable.GetSheet(1).GetRowCount vrací počet datových řádků a vylučuje řádek záhlaví.
  • 🎯 Ukazatel řádku: Před každým čtením zavolejte DataTable.SetCurrentRow, aby DataTable.Value vrátila očekávanou buňku.
  • ✏️ Odepsat: Přiřazení k DataTable.Value změní buňku pouze v paměti; DataTable.Export uloží list na disk.
  • 🧩 Možnost COM: Vytvořte objekt Excel.Application, pokud je vyžadováno formátování, vzorce nebo několik otevřených sešitů.
  • ⚠️ Vyčištění: Vždy volejte Quit a uvolněte objekty, jinak EXCEL.EXE zůstane rezidentní a soubor uzamkne.

Jak importovat, číst a měnit data z Excelu v QTP/UFT

Tabulkové procesory zůstávají nejběžnějším místem, kde testeři uchovávají své vstupní hodnoty, očekávané výsledky a nastavení prostředí. QTP, nyní prodáváno jako OpenText UFT Jeden poté, co se produkt přesunul od HP k Micro Focus a poté k OpenText, čte tyto tabulky prostřednictvím objektu DataTable. Následující části ukazují přesné příkazy používané k importu sešitu, počítání jeho řádků, čtení jednotlivých buněk, změně hodnot a zápisu listu zpět na disk.

Kroky k importu, čtení a změně dat z EXCELu

Uvažte, že chcete importovat následující Prodej.xls sešit do testu.

Zdrojový sešit Sales.xls otevřený v Excelu před importem do UFT

Jakmile je soubor importován do UFT, horní řádek se stane záhlavím sloupce, proto strukturujte data odpovídajícím způsobem. Cokoli v řádku 1 je považováno za název parametru, nikoli za testovací data, a každý zbývající řádek je počítán jako datový řádek.

Syntaxe pro import celého souboru aplikace Excel je uvedena níže.

DataTable.Import(FileName)

V našem případě bude příkaz vypadat takto. VBScript nepotřebuje závorky, když je metoda volána jako příkaz, takže se zde používá prostý tvar.

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

Po spuštění se importované řádky zobrazí v podokně dat za běhu přesně tak, jak byly rozloženy v sešitu.

Importovaná prodejní data zobrazená v UFT panel Tabulka dat za běhu

Dále je uvedena syntaxe pro import jednoho konkrétního listu. SheetSource je list uvnitř sešitu a SheetDest je cílový list v tabulce dat za běhu.

DataTable.ImportSheet FileName, SheetSource, SheetDest

Použití GetRowCount metoda pro získání počtu datových řádků v listu. Každý příkaz musí být na vlastním řádku.

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

Zobrazené okno se zprávou uvádí celkový počet řádků pro importovaný list.

MsgBox zobrazení výsledku GetRowCount pro importovaný prodejní list

Chcete-li přesunout ukazatel na konkrétní řádek, použijte NastavitCurrentRow metoda. Druhý argument metody DataTable.Value je číslo listu, nikoli číslo řádku, a proto je nutné ukazatel řádku přesouvat samostatně.

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

Obě hodnoty se čtou ze stejného sloupce, ale ze dvou různých řádků, a okno se zprávou je vytiskne vedle sebe.

MsgBox porovnání hodnoty roku v řádku 1 a řádku 2 datové tabulky

Použití Hodnota metoda nalevo od přiřazení pro změnu dat v importovaném listu. Změna se uchovává v paměti, dokud ji nezavoláte. Vývoz, který zapíše tabulku dat za běhu zpět do souboru aplikace Excel.

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

Upravená buňka je viditelná v panelu dat za běhu ihned po spuštění přiřazení.

Tabulka dat za běhu zobrazující buňku aktualizovanou metodou DataTable.Value

Otevření exportovaného sešitu potvrdí, že upravené hodnoty byly uloženy na disk, a nikoli pouze po dobu spuštění.

Exportovaný soubor Excel otevřený v Excelu zobrazující změněné hodnoty uložené funkcí DataTable.Export

💡 Tip: Exportovat do souboru s jiným názvem, než je název importovaného souboru. Zpětný zápis do stejného otevřeného sešitu je nejrychlejší způsob, jak spustit narušení sdílení a ztratit běh.

Jak číst, měnit a exportovat data z Excelu: Kompletní příklad

Výše uvedené úryvky demonstrují jednu metodu. V reálném testu řízeném daty jsou sloučeny do jedné smyčky, která prochází každý řádek, něco vypočítá, uloží výsledek a exportuje list. Předpokládejme sešit. Prodej.xls obsahuje následující čtyři sloupce a tři datové řádky.

Rok výroby Kraj Jednotky Cena
2023 Na východ 120 25
2024 Na východ 150 25
2025 West 200 30

Níže uvedený skript přidává Revenue sloupec, vyplní jej řádek po řádku, uchovává průběžný součet a zapíše hotový list do nového souboru. AddParameter se používá, protože sloupec ve zdrojovém sešitu neexistuje; jeho volání pro sloupec, který již existuje, vyvolá chybu.

' 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

Výstup:

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

Tři body v tomto scénáři jsou důležitější než ostatní. Zaprvé, GetRowCount vrací 3 místo 4, protože řádek záhlaví je spotřebován jako názvy sloupců. Za druhé, SetCurrentRow se volá na začátku každé iterace; bez něj by všechny tři iterace četly stejný řádek. Za třetí, hodnoty vycházející z datové tabulky jsou řetězce, takže CInt se aplikuje před násobením, aby se zabránilo zřetězení řetězců namísto aritmetických operací. Přeskočitping DataTable.Export Vypočítaný příjem by zůstal viditelný v datovém panelu, ale chyběl by v žádném souboru na disku.

Objekt DataTable vs. objekt COM v Excelu UFT

Objekt DataTable není jediný způsob, jak se dostat k tabulkovému procesoru. UFT skripty mohou také vytvořit Excel.Application Objekt COM a přímo ovládat Excel. Tyto dva přístupy řeší různé problémy.

Vzhled Objekt DataTable Objekt COM v Excelu
Instalace Excelu Není vyžadováno na spouštěcím stroji Microsoft Musí být nainstalován Excel
Styl oslovování Podle názvu sloupce a ukazatele řádku Podle souřadnic buněk, rozsahů nebo pojmenovaných rozsahů
Iterace Řádky automaticky řídí iterace testů Žádný odkaz na iterace; looping je manuální
Formátování a vzorce Ignorováno; čtou se pouze hodnoty Plný přístup k vzorcům, barvám a grafům
Více sešitů Jedna běhová tabulka, listy importované jeden po druhém Libovolný počet otevřených sešitů najednou
Zprávy o výsledcích Hodnoty se zobrazují v UFT automaticky spustit výsledky Nic se nezaznamená, pokud to sami nenahlásíte.
Úklidová zátěž Vyřizuje UFT Musíte zavřít, ukončit a uvolnit každý objekt

Praktické pravidlo je jednoduché. Pro přímočarou parametrizaci použijte objekt DataTable, kde se každý řádek tabulky stává jednou iterací testování automatizace spustit. Na objekt COM přepněte pouze tehdy, když potřebujete něco, co datová tabulka nedokáže vyjádřit, například přečtení výsledku vzorce, zápis formátované sestavy nebo porovnání dvou sešitů ve stejném skriptu. Následující příklad přečte jednu buňku, zapíše zpět stav a správně ukončí Excel.

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

Výstup:

Cell A2 contains: 2023

Buňka A2 obsahuje hodnotu 2023, protože řádek 1 listu je záhlavím a sloupec A je Rok výrobyVšimněte si, že adresování COM je založeno na jednotkách a počítá hlavičku, zatímco DataTable.SetCurrentRow 1 ukazuje na první datový řádek.

Časté chyby při používání Excelu s UFT a jak je opravit

Většina problémů v Excelu UFT pocházejí z malého souboru opakujících se chyb. Jejich rozpoznání ušetří spoustu času při ladění.

Warning️ Varování: Osiřelý proces EXCEL.EXE je nejčastějším vedlejším účinkem automatizace COM. Každý CreateObject("Excel.Application") který neodpovídá Quit Plus Set … = Nothing Ponechává skrytou instanci Excelu spuštěnou. Po několika stech testovacích spuštěních má spouštěcí počítač nedostatek paměti a zdrojový sešit je uzamčen pro úpravy.

  • Excel zůstává v paměti. Zavřete sešit, zavolejte xlApp.Quita poté uvolněte objekty listu, sešitu a aplikace v tomto pořadí. Uvolnění aplikace jako první ponechá aktivní odkaz a proces se tak udrží aktivní.
  • Změny po běhu zmizí. DataTable.Value zapisuje pouze do tabulky dat za běhu. Bez DataTable.Export, do souborového systému se nic nedostane.
  • Chyba „Sloupec neexistuje“ nebo chyba neplatného parametru. Název sloupce předaný DataTable.Value musí přesně odpovídat buňce záhlaví, včetně koncových mezer. Použijte AddParameter vytvořit sloupec před zápisem do něj.
  • Každá iterace čte stejné hodnoty. SetCurrentRow nebyla volána uvnitř smyčky, takže ukazatel řádku se nikdy nepohnul.
  • Počty řádků s odchylkou o jeden. GetRowCount vylučuje řádek záhlaví. Sešit se záhlavím a deseti záznamy vrací 10, nikoli 11.
  • Chyby cesty a oprávnění. Pevně ​​zakódované cesty, jako například D:\Automation\Sales.xls přerušit na jiných počítačích. Vytvořte cestu z proměnné prostředí, aby se na každém agentovi spustil stejný skript.
  • Sloučené buňky a více řádků záhlaví. Import očekává přesně jeden řádek záhlaví s jedinečnými názvy. Sloučené buňky vytvoří prázdné nebo duplicitní názvy parametrů.
  • Porušení sdílení při exportu. Cílový soubor nelze v Excelu otevřít, zatímco Export spustí. Nejprve jej zavřete nebo exportujte do souboru s časovým razítkem.

Užitečným zvykem je zabalit čištění COM do On Error Resume Next blok umístěný ve vyhrazené funkci obnovy, takže selhání uprostřed skriptu stále vypne Excel. Když data z Excelu odesílají formální modelový případ V repozitáři platí pro výsledky stejná disciplína: exportovat jednou, ověřit existenci souboru a poté jej připojit k běhu.

Chcete-li se v tématech, kterých se zde dotkneme, dále zabývat, projděte si celou QTP/UFT konzultace v širším kontextu se naučte, jak výsledky uplatnit ALM od UFT, zopakujte si základy v testování softwarua porovnejte tento přístup se skriptováním řízeným daty v Selenium.

Nejčastější dotazy

UFT Importuje soubory .xls, .xlsx a .csv do tabulky dat za běhu. Export vždy vytvoří sešit .xls, takže pokud následný systém vyžaduje novější formát .xlsx, je potřeba převodník nebo objekt COM aplikace Excel.

Tabulka návrhového času se uloží s testem a zůstane nezměněna. Tabulka běhového času je kopie vytvořená při zahájení provádění. Importy a přiřazení hodnot ovlivňují pouze kopii běhového času, která se zahodí, pokud není exportována.

Ne pro objekt DataTable, který analyzuje samotný sešit. Ano pro jakýkoli skript, který volá CreateObject(„Excel.Application“), protože tato trasa automatizuje skutečnou instanci Excelu a na počítači bez ní okamžitě selže.

Ano. Volejte ImportSheet jednou pro každý list s pokaždé jiným názvem cílového listu. Globální data patří na globální list, zatímco hodnoty specifické pro akci patří na odpovídající list akcí, takže iterace zůstávají nezávislé.

Ano, a kostra smyčky je obvykle správná. Ručně ověřte dvě věci: zda se SetCurrentRow nachází uvnitř smyčky a zda jsou číselné buňky převedeny pomocí CInt nebo CDbl. Vygenerovaný kód často obě tyto vlastnosti vynechává.

Funkce umělé inteligence v moderním UFT Jeden uvolní ovládací prvky, které rozpoznávají vizuálně, takže přejmenované pole již nerozděluje každý řádek datové sady. Umělá inteligence může také navrhnout další hraniční řádky, čímž rozšíří pokrytí tabulky bez nutnosti ručního návrhu testů.

Shrňte tento příspěvek takto: