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にインストールする必要があります。

結果: