Cách nhập, đọc, thay đổi dữ liệu từ Excel trong QTP/UFT

⚡ Tóm tắt thông minh

Nhập, đọc và chỉnh sửa dữ liệu từ Excel trong QTP/UFT Nó dựa vào đối tượng DataTable tích hợp sẵn, đối tượng này tải một bảng tính vào bảng dữ liệu thời gian chạy để mọi kịch bản tự động hóa có thể điều khiển các bước kiểm thử từ các hàng trong bảng tính.

  • 📥 Nhập khẩu: DataTable.Import tải toàn bộ sổ làm việc, trong khi DataTable.ImportSheet sao chép một trang tính cụ thể vào trang tính đích đã chọn.
  • 🗂️ Quy tắc tiêu đề: Hàng đầu tiên của bảng tính sẽ trở thành tên cột, vì vậy hãy sắp xếp cấu trúc bảng tính trước khi chạy quá trình nhập dữ liệu.
  • 🔢 Đếm số hàng: DataTable.GetSheet(1).GetRowCount trả về số hàng dữ liệu và không bao gồm hàng tiêu đề.
  • 🎯 Con trỏ hàng: Hãy gọi DataTable.SetCurrentRow trước mỗi lần đọc để DataTable.Value trả về ô mà bạn mong đợi.
  • ✏️ Hãy hồi đáp lại: Việc gán giá trị cho DataTable.Value chỉ thay đổi một ô trong bộ nhớ; DataTable.Export lưu toàn bộ trang tính vào ổ đĩa.
  • 🧩 Tùy chọn COM: Hãy tạo một đối tượng Excel.Application khi cần định dạng, công thức hoặc khi mở nhiều sổ làm việc cùng lúc.
  • ⚠️ Dọn dẹp: Luôn gọi hàm Thoát và giải phóng các đối tượng, nếu không EXCEL.EXE sẽ vẫn chạy trên tệp và khóa tệp đó.

Hướng dẫn cách nhập, đọc và chỉnh sửa dữ liệu từ Excel QTP/UFT

Bảng tính vẫn là nơi phổ biến nhất mà người kiểm thử lưu trữ các giá trị đầu vào, kết quả mong đợi và cài đặt môi trường. QTP, hiện được bán dưới dạng OpenText UFT Một là sau khi sản phẩm được chuyển từ HP sang Micro Focus rồi sang... OpenTextChương trình này đọc các bảng tính đó thông qua đối tượng DataTable. Các phần bên dưới hiển thị chính xác các câu lệnh được sử dụng để nhập một sổ làm việc, đếm số hàng, đọc từng ô, thay đổi giá trị và ghi lại bảng tính vào đĩa.

Các bước nhập, đọc, thay đổi dữ liệu từ EXCEL

Giả sử bạn muốn nhập những nội dung sau: doanh số bán hàng.xls Đưa bài tập vào bài kiểm tra của bạn.

Tệp nguồn Sales.xls được mở trong Excel trước khi nhập vào UFT

Sau khi tệp được nhập vào UFTHàng đầu tiên sẽ trở thành tiêu đề cột, vì vậy hãy sắp xếp dữ liệu của bạn cho phù hợp. Mọi thứ ở hàng 1 đều được coi là tên tham số chứ không phải dữ liệu kiểm thử, và mỗi hàng còn lại được tính là một hàng dữ liệu.

Cú pháp để nhập toàn bộ tệp Excel được hiển thị bên dưới.

DataTable.Import(FileName)

Trong trường hợp của chúng ta, câu lệnh sẽ trở thành như sau. VBScript không cần dấu ngoặc đơn khi gọi một phương thức như một câu lệnh, vì vậy dạng thông thường được sử dụng ở đây.

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

Sau khi chạy, các hàng được nhập sẽ xuất hiện trong ngăn Dữ liệu thời gian chạy chính xác như cách chúng được bố trí trong sổ làm việc.

Dữ liệu bán hàng nhập khẩu được hiển thị trong UFT ngăn Bảng dữ liệu thời gian chạy

Cú pháp để nhập một trang tính cụ thể được hiển thị bên dưới. SheetSource là trang tính nằm bên trong sổ làm việc và SheetDest Đây là trang đích trong bảng dữ liệu thời gian chạy.

DataTable.ImportSheet FileName, SheetSource, SheetDest

Sử dụng Lấy số hàng Phương pháp để lấy số lượng hàng dữ liệu trong một bảng tính. Mỗi câu lệnh phải nằm trên một dòng riêng.

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

Hộp thoại thông báo xuất hiện sẽ hiển thị tổng số hàng của trang tính đã nhập.

CôBox Hiển thị kết quả GetRowCount cho trang tính Sales đã nhập.

Để di chuyển con trỏ đến một hàng cụ thể, hãy sử dụng lệnh sau: Đặt hàng hiện tại phương pháp. Đối số thứ hai của DataTable.Value Đây là số trang, không phải số hàng, đó là lý do tại sao con trỏ hàng phải được di chuyển riêng.

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

Cả hai giá trị đều được đọc từ cùng một cột nhưng từ hai hàng khác nhau, và hộp thoại thông báo sẽ in chúng cạnh nhau.

CôBox So sánh giá trị Năm của hàng 1 và hàng 2 trong bảng dữ liệu.

Sử dụng Giá trị Phương thức ở bên trái của câu lệnh gán dùng để thay đổi dữ liệu trong trang tính đã nhập. Sự thay đổi này sẽ được lưu trữ trong bộ nhớ cho đến khi bạn gọi lại phương thức đó. Xuất khẩu, ghi bảng dữ liệu thời gian chạy trở lại một tệp Excel.

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

Ô đã chỉnh sửa sẽ hiển thị trong ngăn Dữ liệu thời gian chạy ngay sau khi phép gán được thực thi.

Bảng dữ liệu thời gian chạy hiển thị một ô được cập nhật thông qua phương thức DataTable.Value.

Việc mở tệp bảng tính đã xuất sẽ xác nhận rằng các giá trị đã sửa đổi được lưu vào ổ đĩa chứ không chỉ được giữ lại trong suốt quá trình chạy.

Tệp Excel đã xuất được mở trong Excel, hiển thị các giá trị đã thay đổi được lưu bởi DataTable.Export.

💡 Mẹo: Hãy xuất dữ liệu sang một tên tệp khác với tên tệp bạn đã nhập. Việc ghi lại vào cùng một sổ làm việc đang mở là cách nhanh nhất để gây ra lỗi vi phạm quyền truy cập và làm mất dữ liệu đã chạy.

Hướng dẫn cách đọc, chỉnh sửa và xuất dữ liệu Excel: Một ví dụ đầy đủ

Các đoạn mã trên mỗi đoạn minh họa một phương pháp. Trong một bài kiểm tra thực tế dựa trên dữ liệu, chúng được kết hợp thành một vòng lặp duy nhất để duyệt qua từng hàng, tính toán một cái gì đó, lưu trữ kết quả và xuất bảng tính. Giả sử bảng tính doanh số bán hàng.xls Bảng này chứa bốn cột và ba hàng dữ liệu sau.

Năm Khu vực Các đơn vị Giá
2023 Đông 120 25
2024 Đông 150 25
2025 hướng Tây 200 30

Đoạn mã bên dưới thêm một Doanh thu Chương trình tạo một cột, điền dữ liệu từng hàng một, liên tục tính tổng và ghi bảng tính đã hoàn thành vào một tệp mới. AddParameter Hàm này được sử dụng vì cột đó không tồn tại trong bảng tính nguồn; việc gọi hàm này cho một cột đã tồn tại sẽ gây ra lỗi.

' 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

Đầu ra:

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

Ba điểm trong kịch bản này quan trọng hơn những điểm còn lại. Thứ nhất, GetRowCount Trả về 3 thay vì 4 vì hàng tiêu đề được sử dụng làm tên cột. Thứ hai, SetCurrentRow Hàm này được gọi ở đầu mỗi vòng lặp; nếu không có nó, cả ba vòng lặp sẽ đọc cùng một hàng. Thứ ba, các giá trị xuất ra từ bảng dữ liệu là chuỗi ký tự, vì vậy CInt Phép toán này được áp dụng trước phép nhân để tránh việc nối chuỗi thay vì thực hiện phép toán số học. Bỏ quaping DataTable.Export Điều này sẽ khiến doanh thu đã tính toán hiển thị trong ngăn Dữ liệu nhưng không được lưu vào bất kỳ tập tin nào trên ổ đĩa.

So sánh đối tượng DataTable với đối tượng COM trong Excel UFT

Đối tượng DataTable không phải là cách duy nhất để truy cập vào bảng tính. UFT tập lệnh cũng có thể tạo ra một Excel.Application Đối tượng COM và điều khiển Excel trực tiếp. Hai cách tiếp cận này giải quyết các vấn đề khác nhau.

Yếu tố Đối tượng DataTable Đối tượng COM Excel
Cài đặt Excel Không cần thiết trên máy thực thi. Microsoft Excel cần được cài đặt.
Phong cách trình bày Theo tên cột và con trỏ hàng Theo tọa độ ô, phạm vi hoặc phạm vi được đặt tên.
Lặp lại Các hàng tự động điều khiển các vòng lặp thử nghiệm. Không có liên kết đến các lần lặp; looping là thủ công
Định dạng và công thức Bỏ qua; chỉ các giá trị được đọc Truy cập đầy đủ vào công thức, màu sắc và biểu đồ.
Nhiều sổ tay Một bảng thời gian chạy duy nhất, các trang tính được nhập từng cái một. Mở đồng thời bất kỳ số lượng sổ làm việc nào.
Báo cáo kết quả Các giá trị xuất hiện trong UFT chạy kết quả tự động Sẽ không có thông tin nào được ghi nhận trừ khi bạn tự báo cáo.
Gánh nặng dọn dẹp Xử lý bởi UFT Bạn phải đóng, thoát và giải phóng mọi đối tượng.

Nguyên tắc thực tế rất đơn giản. Sử dụng đối tượng DataTable để tham số hóa dễ dàng, trong đó mỗi hàng của bảng tính trở thành một lần lặp của một kiểm tra tự động hóa Chạy. Chỉ chuyển sang sử dụng đối tượng COM khi bạn cần thứ gì đó mà bảng dữ liệu không thể thể hiện, chẳng hạn như đọc kết quả công thức, ghi báo cáo được định dạng hoặc so sánh hai sổ làm việc trong cùng một tập lệnh. Ví dụ dưới đây đọc một ô, ghi lại trạng thái và tắt Excel đúng cách.

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

Đầu ra:

Cell A2 contains: 2023

Ô A2 chứa giá trị 2023 vì hàng 1 của bảng tính là hàng tiêu đề và cột A là... NămLưu ý rằng địa chỉ COM được đánh số từ 1 và tính cả phần tiêu đề, trong khi đó DataTable.SetCurrentRow 1 trỏ vào hàng dữ liệu đầu tiên.

Các lỗi thường gặp khi sử dụng Excel với UFT và Cách Sửa Chữa Chúng

Hầu hết các vấn đề về Excel UFT Những lỗi này bắt nguồn từ một số ít lỗi lặp đi lặp lại. Nhận biết được chúng sẽ giúp tiết kiệm rất nhiều thời gian gỡ lỗi.

⚠️ Cảnh báo: Tiến trình EXCEL.EXE bị bỏ rơi là tác dụng phụ phổ biến nhất của tự động hóa COM. Mỗi CreateObject("Excel.Application") điều đó không phù hợp với Quit thêm Set … = Nothing Để lại một phiên bản Excel ẩn đang chạy. Sau vài trăm lần chạy thử, máy thực thi hết bộ nhớ và sổ làm việc nguồn bị khóa, không thể chỉnh sửa.

  • Excel vẫn được lưu trong bộ nhớ. Đóng sổ làm việc lại, gọi điện. xlApp.QuitSau đó, hãy giải phóng các đối tượng trang tính, sổ làm việc và ứng dụng theo thứ tự đó. Việc giải phóng ứng dụng trước tiên sẽ giữ lại một tham chiếu hoạt động và duy trì tiến trình.
  • Các thay đổi sẽ biến mất sau khi quá trình chạy hoàn tất. DataTable.Value Chỉ ghi vào bảng dữ liệu thời gian chạy. Không có DataTable.ExportKhông có dữ liệu nào được gửi đến hệ thống tập tin.
  • "Cột không tồn tại" hoặc lỗi tham số không hợp lệ. Tên cột được truyền đến DataTable.Value Phải khớp chính xác với ô tiêu đề, bao gồm cả khoảng trắng ở cuối. Sử dụng AddParameter Tạo cột trước khi ghi dữ liệu vào cột đó.
  • Mỗi lần lặp đều đọc cùng một giá trị. SetCurrentRow Hàm này không được gọi bên trong vòng lặp, do đó con trỏ hàng không bao giờ di chuyển.
  • Số hàng lệch một hàng. GetRowCount Không bao gồm hàng tiêu đề. Một bảng tính có tiêu đề và mười bản ghi sẽ trả về 10, chứ không phải 11.
  • Lỗi đường dẫn và quyền truy cập. Các đường dẫn được mã hóa cứng như D:\Automation\Sales.xls Lỗi xảy ra trên các máy khác. Hãy xây dựng đường dẫn từ một biến môi trường để cùng một kịch bản có thể chạy trên mọi máy chủ.
  • Các ô được hợp nhất và nhiều hàng tiêu đề. Quá trình nhập dữ liệu yêu cầu chính xác một hàng tiêu đề với các tên duy nhất. Các ô được hợp nhất sẽ tạo ra các tên tham số trống hoặc trùng lặp.
  • Vi phạm quy định chia sẻ dữ liệu xuất khẩu. Không thể mở tệp đích trong Excel trong khi Export Chạy chương trình. Hãy đóng nó trước, hoặc xuất ra tệp có tên kèm dấu thời gian.

Một thói quen hữu ích là gói gọn việc dọn dẹp COM trong một hàm xử lý sự kiện. On Error Resume Next khối được đặt trong một hàm phục hồi chuyên dụng, do đó lỗi xảy ra giữa chừng vẫn khiến Excel tắt. Khi dữ liệu Excel được đưa vào một hàm chính thức trường hợp thử nghiệm Đối với kho lưu trữ, nguyên tắc tương tự cũng áp dụng cho kết quả: xuất một lần, xác minh tệp tồn tại, sau đó đính kèm nó vào lần chạy.

Để hiểu sâu hơn về các chủ đề đã đề cập ở đây, hãy đọc toàn bộ tài liệu. QTP/UFT hướng dẫn Để hiểu rõ hơn về khuôn khổ tổng thể, hãy tìm hiểu cách thúc đẩy kết quả. ALM từ UFT, xem lại những kiến ​​thức cơ bản trong kiểm thử phần mềmvà so sánh phương pháp này với lập trình dựa trên dữ liệu trong Selenium.

Câu Hỏi Thường Gặp

UFT Chương trình nhập các tệp .xls, .xlsx và .csv vào bảng dữ liệu trong quá trình chạy. Việc xuất luôn tạo ra một bảng tính .xls, vì vậy cần có bộ chuyển đổi hoặc đối tượng COM của Excel khi hệ thống tiếp theo yêu cầu định dạng .xlsx mới hơn.

Bảng thiết kế được lưu cùng với tập tin kiểm thử và không thay đổi. Bảng thời gian chạy là một bản sao được tạo ra khi quá trình thực thi bắt đầu. Việc nhập khẩu và gán giá trị chỉ ảnh hưởng đến bản sao thời gian chạy, bản sao này sẽ bị loại bỏ trừ khi nó được xuất ra.

Câu trả lời là không đối với đối tượng DataTable, vì nó tự phân tích bảng tính. Câu trả lời là có đối với bất kỳ tập lệnh nào gọi CreateObject(“Excel.Application”), bởi vì cách này tự động hóa một phiên bản Excel thực sự và sẽ thất bại ngay lập tức trên máy không có Excel.

Đúng vậy. Hãy gọi hàm ImportSheet một lần cho mỗi trang tính, mỗi lần gọi với tên trang tính đích khác nhau. Dữ liệu toàn cục thuộc về trang tính Global, trong khi các giá trị cụ thể cho từng hành động thuộc về trang tính hành động tương ứng để các lần lặp vẫn độc lập với nhau.

Đúng vậy, và cấu trúc vòng lặp thường là chính xác. Hãy tự kiểm tra hai điều: hàm SetCurrentRow nằm bên trong vòng lặp, và các ô số được chuyển đổi bằng CInt hoặc CDbl. Mã được tạo tự động thường bỏ qua cả hai điều này.

Các tính năng AI trong hiện đại UFT Một phiên bản nhận diện các điều khiển trực quan, do đó việc đổi tên trường sẽ không còn làm gián đoạn mọi hàng trong tập dữ liệu nữa. AI cũng có thể đề xuất thêm các hàng ranh giới, mở rộng phạm vi bao phủ của bảng tính mà không cần thiết kế kiểm thử thủ công.

Tóm tắt bài viết này với: