ブック作成サンプルコード
'
' VB .NET X-TRAiN Excelブック読み込みサンプルプログラム
'
' (c) ARKTAN.INC.
'
Imports System.Runtime.InteropServices
Module Module1
'----------------------------------------------------------------------------
' X-TRAiN .Net用ラッピング関数定義(pxls_api.dll)
'----------------------------------------------------------------------------
' 読み込みブックオープン
<System.Runtime.InteropServices.DllImport("pxls_api.dll", CharSet:=CharSet.Ansi, CallingConvention:=CallingConvention.Cdecl)> _
Public Function read_book(ByVal argments As System.Text.StringBuilder) As Integer
End Function
' ブック破棄
<System.Runtime.InteropServices.DllImport("pxls_api.dll", CharSet:=CharSet.Ansi, CallingConvention:=CallingConvention.Cdecl)> _
Public Function scrap_book() As Integer
End Function
' セル値取得
<System.Runtime.InteropServices.DllImport("pxls_api.dll", CharSet:=CharSet.Ansi, CallingConvention:=CallingConvention.Cdecl)> _
Public Function get_cell(ByVal cell As System.Text.StringBuilder, ByVal value As System.Text.StringBuilder, ByVal value_length As Integer) As Integer
End Function
' シートをインデックスでオープン
<System.Runtime.InteropServices.DllImport("pxls_api.dll", CharSet:=CharSet.Ansi, CallingConvention:=CallingConvention.Cdecl)> _
Public Function open_sheet2(ByVal sheet As Integer) As Integer
End Function
' シート数取得
<System.Runtime.InteropServices.DllImport("pxls_api.dll", CharSet:=CharSet.Ansi, CallingConvention:=CallingConvention.Cdecl)> _
Public Function sheet_num() As Integer
End Function
' シート名取得
<System.Runtime.InteropServices.DllImport("pxls_api.dll", CharSet:=CharSet.Ansi, CallingConvention:=CallingConvention.Cdecl)> _
Public Function sheet_name(ByVal argments As System.Text.StringBuilder, ByVal sheet As Integer) As Integer
End Function
' 行数取得
<System.Runtime.InteropServices.DllImport("pxls_api.dll", CharSet:=CharSet.Ansi, CallingConvention:=CallingConvention.Cdecl)> _
Public Function row_num() As Integer
End Function
' 列数取得
<System.Runtime.InteropServices.DllImport("pxls_api.dll", CharSet:=CharSet.Ansi, CallingConvention:=CallingConvention.Cdecl)> _
Public Function column_num(ByVal row As Integer) As Integer
End Function
' セル名取得
<System.Runtime.InteropServices.DllImport("pxls_api.dll", CharSet:=CharSet.Ansi, CallingConvention:=CallingConvention.Cdecl)> _
Public Function cell_name(ByVal argments As System.Text.StringBuilder, ByVal row As Integer, ByVal column As Integer) As Integer
End Function
' エラーコード取得
<System.Runtime.InteropServices.DllImport("pxls_api.dll", CharSet:=CharSet.Ansi, CallingConvention:=CallingConvention.Cdecl)> _
Public Function error_code() As Integer
End Function
' エラーメッセージ取得
<System.Runtime.InteropServices.DllImport("pxls_api.dll", CharSet:=CharSet.Ansi, CallingConvention:=CallingConvention.Cdecl)> _
Public Function error_mesg(ByVal argments As System.Text.StringBuilder) As Integer
End Function
'----------------------------------------------------------------------------
' X-TRAiN for VB .NET Excelブック読み込みサンプルメイン
'----------------------------------------------------------------------------
Sub Main()
Dim rtn, sheet, row, column, num_sheet, num_row, num_column As Integer
Dim arguments, message, buffer, cell As New System.Text.StringBuilder()
' Excelブックオープン
' 処理を終了する際には、scrap_book関数(メモリ破棄)をCALLする必要があります。
' scrap_book関数をCALLしない場合はメモリリークが起こります。
arguments.Length = 0
arguments.Append("VBサンプル1.xlsx")
rtn = read_book(arguments)
If rtn <> 0 Then
arguments.Length = 1024
error_mesg(arguments)
Console.WriteLine(arguments.ToString)
Console.WriteLine("終了するには何かキーを押してください。")
Console.ReadKey()
Environment.Exit(-1)
End If
' シート数
num_sheet = sheet_num()
message.Length = 0
message.Append("シート数=" + num_sheet.ToString())
Console.WriteLine(message)
' シート数繰り返し
For sheet = 0 To num_sheet - 1
' シートをインデックスでオープン
rtn = open_sheet2(sheet)
If rtn <> 0 Then
error_mesg(arguments)
Console.WriteLine(arguments.ToString)
scrap_book()
Console.WriteLine("終了するには何かキーを押してください。")
Console.ReadKey()
Environment.Exit(-1)
End If
' カレントシート名、行数取得
sheet_name(arguments, sheet)
num_row = row_num()
message.Length = 0
message.Append("シート=" + arguments.ToString() + "行数=" + num_row.ToString())
Console.WriteLine(message)
' 行数繰り返し
For row = 0 To num_row - 1
' 列数取得
num_column = column_num(row)
message.Length = 0
' 列数繰り返し
buffer.Length = 0
buffer.Append("[" + (row + 1).ToString() + "]")
For column = 0 To num_column - 1
' セル値取得
cell_name(cell, row + 1, column + 1)
arguments.Length = 4096
get_cell(cell, arguments, arguments.Length)
buffer.Append(arguments.ToString() + ",")
Next
' コンソール画面表示
Console.WriteLine(buffer)
Next
Next
' Excelブッククローズ
rtn = scrap_book()
If rtn <> 0 Then
error_mesg(arguments)
Console.WriteLine(arguments.ToString)
scrap_book()
Environment.Exit(-1)
End If
Console.WriteLine("Excelブックを読み込みました。")
Console.WriteLine("終了するには何かキーを押してください。")
Console.ReadKey()
Environment.Exit(0)
End Sub
End Module
解説
読み込みブックのメモリロード
' Excelブックオープン
' 処理を終了する際には、scrap_book関数(メモリ破棄)をCALLする必要があります。
' scrap_book関数をCALLしない場合はメモリリークが起こります。
arguments.Length = 0
arguments.Append("VBサンプル1.xlsx")
rtn = read_book(arguments)
If rtn <> 0 Then
arguments.Length = 1024
error_mesg(arguments)
Console.WriteLine(arguments.ToString)
Console.WriteLine("終了するには何かキーを押してください。")
Console.ReadKey()
Environment.Exit(-1)
End If
read_book関数を使い、読み込み対象ブックをメモリにロードします。
エラー時は戻り値として0以外が返却されます。
エラーの内容は、error_code関数でエラーコードを、error_mesg関数で
エラーメッセージを取得して行います。
セル値の読み込み
' シート数
num_sheet = sheet_num()
message.Length = 0
message.Append("シート数=" + num_sheet.ToString())
Console.WriteLine(message)
' シート数繰り返し
For sheet = 0 To num_sheet - 1
' シートをインデックスでオープン
rtn = open_sheet2(sheet)
If rtn <> 0 Then
error_mesg(arguments)
Console.WriteLine(arguments.ToString)
scrap_book()
Console.WriteLine("終了するには何かキーを押してください。")
Console.ReadKey()
Environment.Exit(-1)
End If
' カレントシート名、行数取得
sheet_name(arguments, sheet)
num_row = row_num()
message.Length = 0
message.Append("シート=" + arguments.ToString() + "行数=" + num_row.ToString())
Console.WriteLine(message)
' 行数繰り返し
For row = 0 To num_row - 1
' 列数取得
num_column = column_num(row)
message.Length = 0
' 列数繰り返し
buffer.Length = 0
buffer.Append("[" + (row + 1).ToString() + "]")
For column = 0 To num_column - 1
' セル値取得
cell_name(cell, row + 1, column + 1)
arguments.Length = 4096
get_cell(cell, arguments, arguments.Length)
buffer.Append(arguments.ToString() + ",")
Next
' コンソール画面表示
Console.WriteLine(buffer)
Next
Next
sheet_num関数は、シート数を返します。
open_sheet2関数は、シートインデックス(連番)に対応したシートに
カレントシートを切り替えます。
sheet_name関数は、カレントシート名を返します。
row_num関数は、カレントシートの行数を返します。
column_name関数は、カレントブック内の引数で指定された行のカラム数を返します。
get_cell関数は、カレントブック内の引数で指定されたセルの値を文字列として返します。
ブックメモリの解放
' Excelブッククローズ
rtn = scrap_book()
If rtn <> 0 Then
error_mesg(arguments)
Console.WriteLine(arguments.ToString)
scrap_book()
Environment.Exit(-1)
End If
scrap_book関数を使い、メモリの解放を行います。