ブック作成サンプルコード





'
' 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関数を使い、メモリの解放を行います。