Як імпортувати, читати та змінювати дані з EXCEL у QTP/UFT

⚡ Розумний підсумок

Імпорт, читання та зміна даних з Excel в QTP/UFT спирається на вбудований об'єкт DataTable, який завантажує книгу в таблицю даних під час виконання, щоб кожен сценарій автоматизації міг керувати кроками тестування з рядків електронної таблиці.

  • 📥 Імпорт: DataTable.Import завантажує всю книгу, тоді як DataTable.ImportSheet перетягує один іменований аркуш на вибраний аркуш призначення.
  • 🗂️ Правило заголовка: Перший рядок електронної таблиці стане назвами стовпців, тому структуруйте аркуш перед запуском імпорту.
  • 🔢 Кількість рядків: DataTable.GetSheet(1).GetRowCount повертає кількість рядків даних та виключає рядок заголовка.
  • 🎯 Вказівник рядка: Викликайте DataTable.SetCurrentRow перед кожним зчитуванням, щоб DataTable.Value повертала очікувану комірку.
  • ✏️ Напишіть у відповідь: Присвоєння значення DataTable.Value змінює комірку лише в пам'яті; DataTable.Export зберігає аркуш на диск.
  • 🧩 COM-варіант: Створіть об'єкт Excel.Application, коли потрібне форматування, формули або кілька відкритих робочих книг.
  • ⚠️ Прибирати: Завжди викликайте функцію Quit та звільняйте об'єкти, інакше EXCEL.EXE залишається резидентним та блокує файл.

Як імпортувати, читати та змінювати дані з Excel в QTP/UFT

Електронні таблиці залишаються найпоширенішим місцем, де тестувальники зберігають свої вхідні значення, очікувані результати та налаштування середовища. QTP, тепер продається як OpenText UFT Один після того, як продукт перейшов від HP до Micro Focus, а потім до OpenText, зчитує ці електронні таблиці через об'єкт DataTable. У розділах нижче наведено точні оператори, що використовуються для імпорту книги, підрахунку її рядків, зчитування окремих комірок, зміни значень та запису аркуша назад на диск.

Кроки для імпорту, читання та зміни даних із EXCEL

Врахуйте, що ви хочете імпортувати наступне Продажі.xls вставте робочий зошит у свій тест.

Вихідна книга Sales.xls відкрита в Excel перед імпортом у UFT

Після імпорту файлу в UFT, верхній рядок стає заголовком стовпця, тому структуруйте свої дані відповідно. Будь-що в рядку 1 розглядається як назва параметра, а не як тестові дані, а кожен рядок, що залишився, вважається рядком даних.

Синтаксис для імпорту всього файлу Excel наведено нижче.

DataTable.Import(FileName)

У нашому випадку оператор стає таким. VBScript не потребує дужок, коли метод викликається як оператор, тому тут використовується проста форма.

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

Після виконання імпортовані рядки відображаються в області даних під час виконання точно так само, як вони були розміщені в книзі.

Дані імпортованих продажів, що відображаються в UFT панель таблиці даних під час виконання

Далі показано синтаксис для імпорту одного конкретного аркуша. SheetSource це аркуш усередині робочої книги та SheetDest – це цільовий аркуш у таблиці даних під час виконання.

DataTable.ImportSheet FileName, SheetSource, SheetDest

Ввімкніть кнопку GetRowCount метод для отримання кількості рядків даних на аркуші. Кожен оператор має розташовуватися на окремому рядку.

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

У вікні повідомлення, що з’явиться, буде наведено загальну кількість рядків для імпортованого аркуша.

MsgBox відображення результату GetRowCount для імпортованого аркуша продажів

Щоб перемістити вказівник на певний рядок, скористайтеся ВстановитиПоточнийРядок метод. Другий аргумент DataTable.Value – це номер аркуша, а не номер рядка, тому вказівник рядка потрібно переміщувати окремо.

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

Обидва значення зчитуються з одного стовпця, але з двох різних рядків, і вікно повідомлення друкує їх поруч.

MsgBox порівняння значення року з рядка 1 та рядка 2 таблиці даних

Ввімкніть кнопку значення метод ліворуч від завдання для зміни даних в імпортованому аркуші. Зміна зберігається в пам'яті, доки ви не викличете Експорт, який записує таблицю даних під час виконання назад у файл Excel.

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

Відредагована клітинка відображається в області даних під час виконання одразу після виконання завдання.

Таблиця даних під час виконання, що показує клітинку, оновлену за допомогою методу DataTable.Value

Відкриття експортованої книги підтверджує, що змінені значення були збережені на диску, а не зберігалися лише протягом виконання.

Експортований файл Excel, відкритий в Excel, показує змінені значення, збережені DataTable.Export

💡 Порада: Експорт до файлу з іншим ім'ям, ніж той, який ви імпортували. Запис назад до тієї ж відкритої книги – це найшвидший спосіб викликати порушення спільного доступу та втратити виконання.

Як читати, змінювати та експортувати дані Excel: повний приклад

Наведені вище фрагменти демонструють по одному методу. У реальному тесті на основі даних вони об'єднані в один цикл, який проходить кожен рядок, обчислює щось, зберігає результат та експортує аркуш. Припустимо, що це робоча книга. Продажі.xls містить наступні чотири стовпці та три рядки даних.

рік область Одиниці Тарифи
2023 Схід 120 25
2024 Схід 150 25
2025 West 200 30

Наведений нижче скрипт додає Revмісце проведення стовпець, заповнює його рядок за рядком, підраховує поточний підсумок і записує готовий аркуш у новий файл. AddParameter використовується, оскільки стовпець не існує у вихідній книзі; його виклик для стовпця, який вже існує, викликає помилку.

' 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

вихід:

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

Три пункти в цьому сценарії важливіші за інші. По-перше, GetRowCount повертає 3, а не 4, оскільки рядок заголовка використовується як назви стовпців. По-друге, SetCurrentRow викликається на початку кожної ітерації; без нього всі три ітерації читали б один і той самий рядок. По-третє, значення, що виходять з таблиці даних, є рядками, тому CInt застосовується перед множенням, щоб уникнути конкатенації рядків замість арифметичних дій. Пропуститиping DataTable.Export залишить розрахований дохід видимим на панелі даних, але відсутнім у жодному файлі на диску.

Об'єкт DataTable проти COM-об'єкта Excel у UFT

Об'єкт DataTable — це не єдиний спосіб доступу до електронної таблиці. UFT скрипти також можуть створювати Excel.Application COM-об'єкт та безпосередньо керувати Excel. Ці два підходи вирішують різні проблеми.

Аспект Об'єкт DataTable COM-об'єкт Excel
Встановлення Excel Не потрібно на виконавчій машині Microsoft Повинен бути встановлений Excel
Стиль адресації За назвою стовпця та вказівником рядка За координатами комірок, діапазонами або іменованими діапазонами
Ітерації Рядки автоматично запускають ітерації тестування Немає посилання на ітерації; looping ручний
Форматування та формули Ігнорується; зчитуються лише значення Повний доступ до формул, кольорів та діаграм
Кілька робочих книг Одна таблиця часу виконання, аркуші імпортуються по одному Одночасно відкрито будь-яку кількість робочих книг
Звітування про результати Значення відображаються в UFT автоматично запускати результати Нічого не фіксується, якщо ви самі про це не повідомите
Тягар очищення Обробляється UFT Ви повинні закрити, вийти та звільнити кожен об'єкт

Практичне правило просте. Використовуйте об'єкт DataTable для простої параметризації, де кожен рядок електронної таблиці стає однією ітерацією тестування автоматизації запустити. Перемикайтеся на COM-об'єкт лише тоді, коли вам потрібно щось, що таблиця даних не може виразити, наприклад, прочитати результат формули, написати відформатований звіт або порівняти дві книги в одному сценарії. У наведеному нижче прикладі зчитується одна комірка, записується стан і коректно завершується робота 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

вихід:

Cell A2 contains: 2023

У клітинці A2 міститься значення 2023, оскільки рядок 1 робочого аркуша є рядком заголовка, а стовпець A – рікЗверніть увагу, що COM-адресація базується на одиниці та враховує заголовок, тоді як DataTable.SetCurrentRow 1 вказує на перший рядок даних.

Типові помилки під час використання Excel з UFT і як їх виправити

Більшість проблем з Excel в UFT походять від невеликої кількості повторюваних помилок. Їх розпізнавання значно економить час налагодження.

⚠️ Попередження: Осиротілий процес EXCEL.EXE є найпоширенішим побічним ефектом автоматизації COM. Кожен CreateObject("Excel.Application") що не відповідає Quit plus Set … = Nothing залишає прихований екземпляр Excel запущеним. Після кількох сотень тестових запусків виконуваній машині бракує пам'яті, а вихідна книга блокується для редагування.

  • Excel залишається в пам'яті. Закрийте робочу книгу, зателефонуйте xlApp.Quit, а потім звільніть об’єкти аркуша, книги та програми в такому порядку. Якщо спочатку звільнити програму, посилання залишиться активним, і процес залишиться активним.
  • Зміни зникають після пробігу. DataTable.Value записує лише в таблицю даних під час виконання. Без DataTable.Export, нічого не доходить до файлової системи.
  • Помилка «Стовпець не існує» або недійсний параметр. Ім'я стовпця, передане до DataTable.Value має точно збігатися з коміркою заголовка, включаючи пробіли. Використовуйте AddParameter створити стовпець перед записом у нього.
  • Кожна ітерація зчитує ті самі значення. SetCurrentRow не викликався всередині циклу, тому вказівник рядка ніколи не рухався.
  • Кількість рядків, що відрізняються на одиницю. GetRowCount виключає рядок заголовка. Робоча книга із заголовком і десятьма записами повертає 10, а не 11.
  • Помилки шляху та дозволів. Жорстко закодовані шляхи, такі як D:\Automation\Sales.xls перервати на інших машинах. Створіть шлях зі змінної середовища, щоб той самий скрипт виконувався на кожному агенті.
  • Об'єднані комірки та кілька рядків заголовків. Імпорт очікує лише один рядок заголовка з унікальними іменами. Об'єднані комірки призводять до порожніх або дубльованих імен параметрів.
  • Порушення спільного доступу під час експорту. Цільовий файл не можна відкрити в Excel, поки Export виконується. Спочатку закрийте його або експортуйте до файлу з назвою з позначкою часу.

Корисна звичка — обгортати очищення COM в On Error Resume Next блок, розміщений у спеціальній функції відновлення, тому збій під час виконання скрипта все одно призводить до зупинки Excel. Коли дані Excel передаються до формального тестовий випадок репозиторію, та сама дисципліна застосовується до результатів: експортувати один раз, перевірити існування файлу, а потім додати його до запуску.

Щоб глибше розібратися з порушеними тут темами, опрацюйте повний QTP/UFT підручник для ширшого контексту навчіться впроваджувати результати АЛМ від UFT, перегляньте основи в тестування програмного забезпеченнята порівняйте цей підхід зі сценаріями на основі даних у Selenium.

Поширені запитання

UFT імпортує файли .xls, .xlsx та .csv до таблиці даних середовища виконання. Експорт завжди створює книгу .xls, тому конвертер або COM-об'єкт Excel потрібен, коли наступній системі потрібен новіший формат .xlsx.

Таблиця часу розробки зберігається разом із тестом і залишається незмінною. Таблиця часу виконання – це копія, що створюється на початку виконання. Імпорт та призначення значень впливають лише на копію часу виконання, яка відкидається, якщо її не експортувати.

Ні для об’єкта DataTable, який аналізує саму книгу. Так для будь-якого скрипта, який викликає CreateObject(“Excel.Application”), оскільки цей маршрут автоматизує реальний екземпляр Excel і негайно завершує роботу на комп’ютері без нього.

Так. Викликайте ImportSheet один раз для кожного аркуша з різною назвою аркуша призначення щоразу. Глобальні дані належать до глобального аркуша, тоді як значення, що відповідають дії, належать до відповідного аркуша дії, тому ітерації залишаються незалежними.

Так, і скелет циклу зазвичай правильний. Перевірте дві речі вручну: що SetCurrentRow знаходиться всередині циклу, і що числові комірки конвертуються за допомогою CInt або CDbl. Згенерований код часто пропускає обидва.

Функції штучного інтелекту в сучасному UFT Один випуск розпізнає елементи керування візуально, тому перейменоване поле більше не розриває кожен рядок набору даних. Штучний інтелект також може пропонувати додаткові граничні рядки, розширюючи покриття електронної таблиці без ручного проектування тестів.

Підсумуйте цей пост за допомогою: