HowTos > Screen Scrape Data to a Spreadsheet |
This sample opens an Excel spreadsheet and copies data from a terminal screen in the InfoConnect demo program to the spreadsheet row by row until it encounters an empty row. The GetText method is used to copy the data.
The screen that displays the data must be visible in the terminal window when you run the macro.
![]() |
This article contains tabbed content that is specific to each terminal type. Be sure the tab for your terminal type is selected. |
Screen scrape data to a spreadsheet |
Copy Code
|
---|---|
Sub SaveDataToExcelSpreadSheet() Dim path As String Dim rowText As String Dim col, row As Integer Dim rowFromHost() As String Dim ExcelApp As Object Dim wkBook As Object Set ExcelApp = CreateObject("Excel.Application") ExcelApp.Visible = True Set wkBook = ExcelApp.Workbooks.Add wkBook.Sheets("sheet1").Activate 'Starting on row 7, get the first row of data row = 7 rowText = ThisIbmScreen.GetText(row, 9, 65) Do 'Replace spaces between words in first column and remove extra spaces rowText = Replace(rowText, " ", "_", 1, 1) rowText = ExcelApp.WorksheetFunction.Trim(rowText) 'Place each column into an array rowFromHost = Split(rowText, " ") For col = LBound(rowFromHost) To UBound(rowFromHost) 'Replace delimiter that was added to handle multiple words in first column rowFromHost(col) = Replace(rowFromHost(col), "_", " ", 1, 1) 'Write column to spreadsheet wkBook.Sheets("sheet1").cells(row, (col + 5)).value = rowFromHost(col) Next col 'Get the next row of data from the screen row = row + 1 rowText = ThisIbmScreen.GetText(row, 9, 65) 'Loop until the first empty row Loop While Len(ExcelApp.WorksheetFunction.Trim(rowText)) > 1 End Sub |
Screen scrape data to a spreadsheet |
Copy Code
|
---|---|
Sub SaveDataToExcel() Dim path As String Dim rowText As String Dim row As Integer, col As Integer Dim rowFromHost() As String Dim ExcelApp As Object Dim wkBook As Object Set ExcelApp = CreateObject("Excel.Application") ExcelApp.Visible = True Set wkBook = ExcelApp.Workbooks.Add wkBook.Sheets("sheet1").Activate 'starting on row 5, get the first row of text from the screen row = 5 rowText = ThisScreen.GetText(row, 24, 32) Do 'replace spaces between words in first column and remove extra spaces rowText = Replace(rowText, "|", "") rowText = ExcelApp.WorksheetFunction.Trim(rowText) 'Place each column into an array rowFromHost = Split(rowText, " ") For col = LBound(rowFromHost) To UBound(rowFromHost) 'Replace delimiter rowFromHost(col) = Replace(rowFromHost(col), "_", " ", 1, 1) 'Write row to spreadsheet wkBook.Sheets("sheet1").cells(row, (col + 5)).value = rowFromHost(col) Next col row = row + 1 rowText = ThisScreen.GetText(row, 24, 32) 'Loop until the first empty row Loop While Len(ExcelApp.WorksheetFunction.Trim(rowText)) > 1 End Sub |
First, this sample opens Excel, adds a new workbook, and then activates a sheet in the workbook.
Open Excel workbook and activate a sheet |
Copy Code
|
---|---|
Dim ExcelApp As Object Dim wkBook As Object Set ExcelApp = CreateObject("Excel.Application") ExcelApp.Visible = True Set wkBook = ExcelApp.Workbooks.Add wkBook.Sheets("sheet1").Activate |
Then it initializes the row variable to the first row it needs to copy and starts a loop to copy data until an empty row is encountered. The GetText method is used to get a row of data from the screen as a text string. This method retrieves a string of text from the screen, given starting row and column values and a length.
![]() |
If you are copying structured data (as in our IBM sample), you can use the screen row coordinates for your starting point. For nonstructured data (such as Open Systems sessions), you'll need to get the starting point coordinates by recording a macro or by searching for unique text on the screen as shown in Navigating Sessions. |
Get the text from the screen |
Copy Code
|
---|---|
'Get a row of text from the screen
rowText = ThisIbmScreen.GetText(row, 9, 65)
|
Get the text from the screen |
Copy Code
|
---|---|
'Get a row of text from the screen
'Using the row, column, and length values from a recorded macro
rowText = ThisScreen.GetText(row, 24, 32)
|
After the macro gets the text, it combines labels with multiple words into single words, removes extra spaces between words, and then creates an array.
Finally, the values from the array are copied into the Excel workbook. First the "_" added between compound words with spaces is replaced, and then the array values are put into the corresponding columns in the Excel worksheet.
Copy values into Excel |
Copy Code
|
---|---|
For col = LBound(rowFromHost) To UBound(rowFromHost) 'Replace delimiter rowFromHost(col) = Replace(rowFromHost(col), "_", " ", 1, 1) 'Write row to spreadsheet wkBook.Sheets("sheet1").cells(row, (col + 5)).value = rowFromHost(col) Next col |