Excelのワークシートからデータを読み込む
このチュートリアルでは、Excelのワークシートからデータを読み込み、その結果をSAPの画面に表示する方法を示します。
今回の例では、悪意のあるコードと担当社員を対応付ける作業表が用意されています。ここでは、入力されたコードに基づいて社員を判定します。

入力フィールド、プッシュボタン、およびSAP画面への出力フィールドを新たに追加します。
inputfield (20,1) “Read user to code from excel-file” (20,35) size=“25” name=“code” default=“TSC99” -uppercase
inputfield (20,70) size=“15” name=“usertocode” -uppercase -nolabel
pushbutton (20,62) “ok” process=“read_excel_va03.txt”
InputScriptの”read_excel_va03.txt”においてVB.NET関数を呼び出し、ファイル名とコードをパラメーターとしてその関数に渡します。
callvb utilities.exceldotnet.TestReadCellsExcel “D:\Excel\duty_rota.xlsx” “&V[code]”
return
ここでは、クラスライブラリ”utilities.dll”にある”exceldotnet”クラスの”TestReadCellsExcel”関数を実装します。MS Excelと情報をやり取りするために、Microsoftが提供するインターフェイスを利用します。そのため、関連するクラスライブラリへの参照をプロジェクトに追加し、クラスにその名前空間をインポートします。

| 1 | Imports Microsoft.Office.Interop |
| 2 | Imports guinet |
| 3 | |
| 4 | Public Class exceldotnet |
| 5 | |
| 6 | Public Function TestReadCellsExcel(ByVal filename As String, ByVal code As String) As String |
| 7 | |
| 8 | Dim returncode = “1” |
| 9 | Dim oXL As New Excel.Application |
| 10 | Dim g As New guixt |
| 11 | |
| 12 | Try |
| 13 | |
| 14 | Dim oWB As Excel.Workbook |
| 15 | Dim oSheet As Excel.Worksheet |
| 16 | |
| 17 | oXL = CreateObject(“Excel.Application”) |
| 18 | oXL.Visible = False |
| 19 | |
| 20 | oWB = oXL.Workbooks.Open(filename) |
| 21 | oSheet = oWB.ActiveSheet |
| 22 | |
| 23 | Dim range As Excel.Range = oSheet.UsedRange |
| 24 | Dim c As Integer = 1 |
| 25 | |
| 26 | For Each r In range.Rows |
| 27 | |
| 28 | If oSheet.Cells(c, 1).Value.ToString = code Then |
| 29 | g.SetVariable(“usertocode”, oSheet.Cells(c, 2).Value.ToString) |
| 30 | returncode = “0” |
| 31 | Exit For |
| 32 | |
| 33 | End If |
| 34 | c += 1 |
| 35 | Next |
| 36 | |
| 37 | Catch |
| 38 | |
| 39 | oXL.ActiveWorkbook.Close(False) |
| 40 | oXL.Quit() |
| 41 | Return “Exception” |
| 42 | |
| 43 | End Try |
| 44 | |
| 45 | oXL.ActiveWorkbook.Close(False) |
| 46 | oXL.Quit() |
| 47 | |
| 48 | Return returncode |
| 49 | |
| 50 | |
| 51 | End Function |
| 52 | |
| 53 | End Class |
29行目で、担当社員名をGuiXT変数に直接代入しています。これは、このデータがSAPの画面に直ちに表示されることを意味しています。
注: MS ExcelがVB.NETインターフェイスを介して呼び出され、非表示で実行される場合でも、MS ExcelをクライアントPCにインストールする必要があります。
結果:


