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.

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.
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.
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.
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.
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í.
Otevření exportovaného sešitu potvrdí, že upravené hodnoty byly uloženy na disk, a nikoli pouze po dobu spuštění.
💡 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.Valuezapisuje pouze do tabulky dat za běhu. BezDataTable.Export, do souborového systému se nic nedostane. - Chyba „Sloupec neexistuje“ nebo chyba neplatného parametru. Název sloupce předaný
DataTable.Valuemusí přesně odpovídat buňce záhlaví, včetně koncových mezer. PoužijteAddParametervytvořit sloupec před zápisem do něj. - Každá iterace čte stejné hodnoty.
SetCurrentRownebyla volána uvnitř smyčky, takže ukazatel řádku se nikdy nepohnul. - Počty řádků s odchylkou o jeden.
GetRowCountvyluč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.xlspř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
Exportspustí. 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.






