Jak importować, odczytywać i zmieniać dane z programu EXCEL w QTP/UFT

⚡ Inteligentne podsumowanie

Importowanie, odczytywanie i zmienianie danych z programu Excel w QTP/UFT opiera się na wbudowanym obiekcie DataTable, który ładuje skoroszyt do tabeli danych w czasie wykonywania, dzięki czemu każdy skrypt automatyzacji może sterować krokami testowymi na podstawie wierszy arkusza kalkulacyjnego.

  • 📥 Import: DataTable.Import ładuje cały skoroszyt, natomiast DataTable.ImportSheet pobiera jeden nazwany arkusz do wybranego arkusza docelowego.
  • 🗂️. Reguła nagłówka: Pierwszy wiersz arkusza kalkulacyjnego staje się nazwami kolumn, dlatego przed rozpoczęciem importu należy uporządkować arkusz.
  • 🔢 Liczba wierszy: DataTable.GetSheet(1).GetRowCount zwraca liczbę wierszy danych i wyklucza wiersz nagłówka.
  • 🎯 Wskaźnik wiersza: Przed każdym odczytem wywołaj DataTable.SetCurrentRow, aby DataTable.Value zwróciło oczekiwaną komórkę.
  • ✏️ Odpisać: Przypisanie do DataTable.Value zmienia tylko komórkę w pamięci; DataTable.Export zapisuje arkusz na dysku.
  • 🧩 Opcja COM: Utwórz obiekt Excel.Application, jeśli wymagane jest formatowanie, formuły lub otwartych jest kilka skoroszytów.
  • ⚠️ Sprzątać: Zawsze wywołuj Quit i zwalniaj obiekty, w przeciwnym razie EXCEL.EXE pozostanie rezydentny i zablokuje plik.

Jak importować, odczytywać i zmieniać dane z programu Excel w QTP/UFT

Arkusze kalkulacyjne pozostają najpopularniejszym miejscem, w którym testerzy przechowują swoje wartości wejściowe, oczekiwane wyniki i ustawienia środowiska. QTP, teraz sprzedawane jako OpenText UFT Po przeniesieniu produktu z HP do Micro Focus, a następnie do OpenText, odczytuje te arkusze kalkulacyjne za pomocą obiektu DataTable. Poniższe sekcje pokazują dokładne instrukcje używane do importowania skoroszytu, zliczania wierszy, odczytywania poszczególnych komórek, zmiany wartości i zapisywania arkusza z powrotem na dysk.

Kroki importowania, odczytywania i zmiany danych z programu Excel

Załóżmy, że chcesz zaimportować następujące elementy Sprzedaż.xls zeszyt ćwiczeń do testu.

Skoroszyt źródłowy Sales.xls został otwarty w programie Excel przed zaimportowaniem do programu UFT

Po zaimportowaniu pliku do UFT, górny wiersz staje się nagłówkiem kolumny, dlatego ustrukturyzuj swoje dane odpowiednio. Wszystko w wierszu 1 jest traktowane jako nazwa parametru, a nie jako dane testowe, a każdy pozostały wiersz jest liczony jako wiersz danych.

Poniżej przedstawiono składnię importowania całego pliku Excel.

DataTable.Import(FileName)

W naszym przypadku polecenie wygląda następująco. VBScript nie wymaga stosowania nawiasów, gdy metoda jest wywoływana jako polecenie, dlatego tutaj użyto zwykłej formy.

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

Po uruchomieniu zaimportowane wiersze pojawiają się w panelu Dane czasu wykonania dokładnie tak, jak były rozmieszczone w skoroszycie.

Importowane dane sprzedaży wyświetlane w UFT panel tabeli danych w czasie wykonywania

Poniżej przedstawiono składnię importowania konkretnego arkusza. SheetSource jest arkuszem wewnątrz skoroszytu i SheetDest jest arkuszem docelowym w tabeli danych czasu wykonania.

DataTable.ImportSheet FileName, SheetSource, SheetDest

Użyj Pobierz liczbę wierszy Metoda pobierania liczby wierszy danych w arkuszu. Każde polecenie musi znajdować się w osobnym wierszu.

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

W wyświetlonym oknie komunikatu wyświetlana jest liczba wierszy dla zaimportowanego arkusza.

msgBox wyświetlanie wyniku GetRowCount dla zaimportowanego arkusza sprzedaży

Aby przesunąć wskaźnik do określonego wiersza, użyj Ustaw bieżący wiersz metoda. Drugi argument DataTable.Value jest numerem arkusza, a nie numerem wiersza, dlatego wskaźnik wiersza należy przesunąć osobno.

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

Obie wartości odczytywane są z tej samej kolumny, ale z dwóch różnych wierszy, a pole komunikatu wyświetla je obok siebie.

msgBox porównanie wartości roku w wierszu 1 i wierszu 2 tabeli danych

Użyj Wartość: Metoda po lewej stronie zadania służy do zmiany danych w importowanym arkuszu. Zmiana jest przechowywana w pamięci do momentu wywołania Export, który zapisuje tabelę danych czasu wykonania z powrotem do pliku Excel.

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

Edytowana komórka jest widoczna w panelu Dane czasu wykonania bezpośrednio po uruchomieniu zadania.

Tabela danych w czasie wykonywania pokazująca komórkę zaktualizowaną za pomocą metody DataTable.Value

Otwarcie wyeksportowanego skoroszytu potwierdza, że ​​zmodyfikowane wartości zostały zapisane na dysku, a nie przechowywane tylko na czas trwania wykonywania.

Wyeksportowany plik Excela otwarty w programie Excel pokazujący zmienione wartości zapisane przez DataTable.Export

💡 Wskazówka: Eksportuj do pliku o innej nazwie niż ta, którą zaimportowałeś. Ponowne zapisanie do tego samego otwartego skoroszytu to najszybszy sposób na wywołanie naruszenia zasad udostępniania i utratę wykonania.

Jak odczytywać, zmieniać i eksportować dane z programu Excel: kompletny przykład

Powyższe fragmenty kodu demonstrują jedną metodę. W rzeczywistym teście opartym na danych są one łączone w jedną pętlę, która przechodzi przez każdy wiersz, oblicza coś, zapisuje wynik i eksportuje arkusz. Załóżmy, że skoroszyt Sprzedaż.xls zawiera następujące cztery kolumny i trzy wiersze danych.

Rok Region Jednostki Cena
2023 Wschód 120 25
2024 Wschód 150 25
2025 Zachód 200 30

Poniższy skrypt dodaje Revprzyjść kolumnę, wypełnia ją wiersz po wierszu, prowadzi bieżące podsumowanie i zapisuje gotowy arkusz do nowego pliku. AddParameter jest używane, ponieważ kolumna nie istnieje w skoroszycie źródłowym; wywołanie jej dla kolumny, która już istnieje, powoduje błąd.

' 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

Wyjście:

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

Trzy punkty w tym scenariuszu są ważniejsze niż pozostałe. Po pierwsze, GetRowCount Zwraca 3 zamiast 4, ponieważ wiersz nagłówka jest używany jako nazwy kolumn. Po drugie, SetCurrentRow Funkcja ta jest wywoływana na początku każdej iteracji; bez niej wszystkie trzy iteracje odczytałyby ten sam wiersz. Po trzecie, wartości wychodzące z tabeli danych to ciągi znaków, więc CInt jest stosowany przed mnożeniem, aby uniknąć łączenia ciągów znaków zamiast wykonywania działań arytmetycznych. Pomińping DataTable.Export spowoduje, że obliczony przychód będzie widoczny w panelu Dane, ale nie będzie go w żadnym pliku na dysku.

Obiekt DataTable a obiekt COM programu Excel w UFT

Obiekt DataTable nie jest jedynym sposobem dostępu do arkusza kalkulacyjnego. UFT skrypty mogą również tworzyć Excel.Application Obiekt COM i bezpośredni sterownik Excela. Te dwa podejścia rozwiązują różne problemy.

WYGLĄD Obiekt DataTable Obiekt COM programu Excel
Instalacja programu Excel Nie jest wymagane na maszynie wykonawczej Microsoft Należy zainstalować program Excel
Styl adresowania Według nazwy kolumny i wskaźnika wiersza Według współrzędnych komórki, zakresów lub nazwanych zakresów
Iteracje Wiersze automatycznie sterują iteracjami testów Brak linku do iteracji; zobaczping jest ręczny
Formatowanie i formuły Zignorowano; odczytywane są tylko wartości Pełny dostęp do formuł, kolorów i wykresów
Wiele skoroszytów Jedna tabela wykonawcza, arkusze importowane pojedynczo Możliwość jednoczesnego otwarcia dowolnej liczby skoroszytów
Raportowanie wyników Wartości pojawiają się w UFT uruchom wyniki automatycznie Nic nie zostanie zarejestrowane, jeśli sam tego nie zgłosisz
Obciążenie związane ze sprzątaniem Obsługiwane przez UFT Musisz zamknąć, wyjść i zwolnić każdy obiekt

Praktyczna zasada jest prosta. Użyj obiektu DataTable do prostej parametryzacji, gdzie każdy wiersz arkusza kalkulacyjnego staje się jedną iteracją testowanie automatyzacji Uruchom. Przełącz się na obiekt COM tylko wtedy, gdy potrzebujesz czegoś, czego tabela danych nie może wyrazić, na przykład odczytu wyniku formuły, utworzenia sformatowanego raportu lub porównania dwóch skoroszytów w tym samym skrypcie. Poniższy przykład odczytuje jedną komórkę, zapisuje status i poprawnie zamyka program 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

Wyjście:

Cell A2 contains: 2023

Komórka A2 zawiera 2023, ponieważ wiersz 1 arkusza kalkulacyjnego jest wierszem nagłówka, a kolumna A jest Rok. Należy zauważyć, że adresowanie COM jest oparte na jedynce i zlicza nagłówek, podczas gdy DataTable.SetCurrentRow 1 punktów w pierwszym wierszu danych.

Typowe błędy podczas korzystania z programu Excel UFT i jak je naprawić

Większość problemów z programem Excel w UFT wynikają z niewielkiej liczby powtarzalnych błędów. Ich rozpoznanie pozwala zaoszczędzić mnóstwo czasu na debugowaniu.

⚠️ Ostrzeżenie: Osierocony proces EXCEL.EXE to najczęstszy efekt uboczny automatyzacji COM. Każdy CreateObject("Excel.Application") który nie jest dopasowany do Quit plus Set … = Nothing Pozostawia uruchomioną ukrytą instancję programu Excel. Po kilkuset uruchomieniach testów w maszynie wykonawczej kończy się pamięć, a skoroszyt źródłowy zostaje zablokowany do edycji.

  • Excel pozostaje w pamięci. Zamknij skoroszyt, zadzwoń xlApp.Quit, a następnie zwolnij obiekty arkusza, skoroszytu i aplikacji w tej kolejności. Zwolnienie aplikacji w pierwszej kolejności pozostawia aktywne odniesienie i utrzymuje proces przy życiu.
  • Zmiany znikają po uruchomieniu. DataTable.Value zapisuje tylko do tabeli danych w czasie wykonywania. Bez DataTable.Export, nic nie dociera do systemu plików.
  • „Kolumna nie istnieje” lub błąd nieprawidłowego parametru. Nazwa kolumny przekazana do DataTable.Value musi dokładnie odpowiadać komórce nagłówka, łącznie ze spacjami na końcu. Użyj AddParameter aby utworzyć kolumnę przed zapisaniem do niej danych.
  • Każda iteracja odczytuje te same wartości. SetCurrentRow nie została wywołana wewnątrz pętli, więc wskaźnik wiersza nigdy się nie przesunął.
  • Liczba wierszy różniących się o jeden. GetRowCount wyklucza wiersz nagłówka. Skoroszyt z nagłówkiem i dziesięcioma rekordami zwraca 10, a nie 11.
  • Błędy ścieżki i uprawnień. Ścieżki zakodowane na stałe, takie jak D:\Automation\Sales.xls Przerwij na innych maszynach. Zbuduj ścieżkę ze zmiennej środowiskowej, aby ten sam skrypt działał na każdym agencie.
  • Połączone komórki i wiele wierszy nagłówka. Import oczekuje dokładnie jednego wiersza nagłówka z unikalnymi nazwami. Połączone komórki generują puste lub zduplikowane nazwy parametrów.
  • Naruszenie zasad udostępniania podczas eksportu. Nie można otworzyć pliku docelowego w programie Excel, gdy Export uruchamia się. Najpierw zamknij go lub wyeksportuj do pliku z nazwą oznaczoną znacznikiem czasu.

Przydatnym nawykiem jest opakowanie czyszczenia COM w On Error Resume Next blok umieszczony w dedykowanej funkcji odzyskiwania, więc awaria w trakcie skryptu nadal powoduje zamknięcie programu Excel. Gdy dane z programu Excel przesyłane są do formalnego walizka testowa repozytorium, ta sama zasada obowiązuje w przypadku wyników: eksportuj raz, sprawdź, czy plik istnieje, a następnie dołącz go do przebiegu.

Aby kontynuować omawianie tematów poruszanych w tym miejscu, przejrzyj całość QTP/UFT Tutorial aby uzyskać szerszy obraz, dowiedz się, jak wprowadzać wyniki do ALM z UFT, przejrzyj podstawy w Testowanie oprogramowaniai porównaj to podejście ze skryptowaniem opartym na danych w Selenium.

FAQ

UFT Importuje pliki .xls, .xlsx i .csv do tabeli danych w czasie wykonywania. Funkcja eksportu zawsze generuje skoroszyt w formacie .xls, więc gdy system podrzędny wymaga nowszego formatu .xlsx, potrzebny jest konwerter lub obiekt Excel COM.

Tabela czasu projektowania jest zapisywana wraz z testem i pozostaje niezmieniona. Tabela czasu wykonania to kopia tworzona w momencie rozpoczęcia wykonywania. Importy i przypisania wartości wpływają tylko na kopię czasu wykonania, która jest usuwana, chyba że zostanie wyeksportowana.

Nie dla obiektu DataTable, który analizuje sam skoroszyt. Tak dla każdego skryptu wywołującego CreateObject(“Excel.Application”), ponieważ ta ścieżka automatyzuje prawdziwą instancję programu Excel i natychmiast kończy się niepowodzeniem na komputerze bez niej.

Tak. Wywołaj ImportSheet raz dla każdego arkusza, za każdym razem podając inną nazwę arkusza docelowego. Dane globalne znajdują się w arkuszu globalnym, a wartości specyficzne dla akcji – w odpowiadającym im arkuszu akcji, dzięki czemu iteracje pozostają niezależne.

Tak, a szkielet pętli jest zazwyczaj poprawny. Sprawdź ręcznie dwie rzeczy: czy SetCurrentRow znajduje się wewnątrz pętli i czy komórki numeryczne są konwertowane za pomocą CInt lub CDbl. Wygenerowany kod często pomija oba te elementy.

Funkcje sztucznej inteligencji w nowoczesnym wydaniu UFT Jedno z wydań rozpoznaje kontrolki wizualnie, więc zmiana nazwy pola nie powoduje już podziału każdego wiersza zestawu danych. Sztuczna inteligencja może również sugerować dodatkowe wiersze graniczne, zwiększając zakres arkusza kalkulacyjnego bez konieczności ręcznego projektowania testów.

Podsumuj ten post następująco: