Як імпортувати, читати та змінювати дані з EXCEL у QTP/UFT
⚡ Розумний підсумок
Імпорт, читання та зміна даних з Excel в QTP/UFT спирається на вбудований об'єкт DataTable, який завантажує книгу в таблицю даних під час виконання, щоб кожен сценарій автоматизації міг керувати кроками тестування з рядків електронної таблиці.
Електронні таблиці залишаються найпоширенішим місцем, де тестувальники зберігають свої вхідні значення, очікувані результати та налаштування середовища. QTP, тепер продається як OpenText UFT Один після того, як продукт перейшов від HP до Micro Focus, а потім до OpenText, зчитує ці електронні таблиці через об'єкт DataTable. У розділах нижче наведено точні оператори, що використовуються для імпорту книги, підрахунку її рядків, зчитування окремих комірок, зміни значень та запису аркуша назад на диск.
Кроки для імпорту, читання та зміни даних із EXCEL
Врахуйте, що ви хочете імпортувати наступне Продажі.xls вставте робочий зошит у свій тест.
Після імпорту файлу в UFT, верхній рядок стає заголовком стовпця, тому структуруйте свої дані відповідно. Будь-що в рядку 1 розглядається як назва параметра, а не як тестові дані, а кожен рядок, що залишився, вважається рядком даних.
Синтаксис для імпорту всього файлу Excel наведено нижче.
DataTable.Import(FileName)
У нашому випадку оператор стає таким. VBScript не потребує дужок, коли метод викликається як оператор, тому тут використовується проста форма.
DataTable.Import "D:\Automation\Sales.xls"
Після виконання імпортовані рядки відображаються в області даних під час виконання точно так само, як вони були розміщені в книзі.
Далі показано синтаксис для імпорту одного конкретного аркуша. SheetSource це аркуш усередині робочої книги та SheetDest – це цільовий аркуш у таблиці даних під час виконання.
DataTable.ImportSheet FileName, SheetSource, SheetDest
Ввімкніть кнопку GetRowCount метод для отримання кількості рядків даних на аркуші. Кожен оператор має розташовуватися на окремому рядку.
DataTable.Import "D:\Automation\Sales.xls" row = DataTable.GetSheet(1).GetRowCount MsgBox row
У вікні повідомлення, що з’явиться, буде наведено загальну кількість рядків для імпортованого аркуша.
Щоб перемістити вказівник на певний рядок, скористайтеся ВстановитиПоточнийРядок метод. Другий аргумент 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
Обидва значення зчитуються з одного стовпця, але з двох різних рядків, і вікно повідомлення друкує їх поруч.
Ввімкніть кнопку значення метод ліворуч від завдання для зміни даних в імпортованому аркуші. Зміна зберігається в пам'яті, доки ви не викличете Експорт, який записує таблицю даних під час виконання назад у файл Excel.
DataTable.SetCurrentRow 1 DataTable.Value("Year", 1) = 2026 DataTable.Export "D:\Automation\Sales_Updated.xls"
Відредагована клітинка відображається в області даних під час виконання одразу після виконання завдання.
Відкриття експортованої книги підтверджує, що змінені значення були збережені на диску, а не зберігалися лише протягом виконання.
💡 Порада: Експорт до файлу з іншим ім'ям, ніж той, який ви імпортували. Запис назад до тієї ж відкритої книги – це найшвидший спосіб викликати порушення спільного доступу та втратити виконання.
Як читати, змінювати та експортувати дані 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.







