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





'
' 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 open_book() As Integer
    End Function
    ' ブック保存
    <System.Runtime.InteropServices.DllImport("pxls_api.dll", CharSet:=CharSet.Ansi, CallingConvention:=CallingConvention.Cdecl)> _
    Public Function save_book() 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 put_values(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 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 cell_range(ByVal argments As System.Text.StringBuilder, ByVal row1 As Integer, ByVal column1 As Integer, _
                ByVal row2 As Integer, ByVal column2 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, row, max_row, line_ct As Integer
        Dim values As String
        Dim arguments, cell1, cell2, cell3, cell4, cell5, range As New System.Text.StringBuilder()
        Dim now_date As Date

        ' Excelブックオープン
        ' 処理を終了する際には、save_book関数(保存して正常終了)またはscrap_book関数(メモリ破棄)をCALLする必要があります。
        ' scrap_book関数をCALLしない場合はメモリリークが起こります。
        rtn = open_book()
        If rtn <> 0 Then
            Console.WriteLine("ERROR:open_book()")
            Environment.Exit(-1)
        End If

        ' ブック名設定
        ' 値や属性の設定はput_values関数に、項目=項目値の形式の引数で指定します。
        ' 空白またはタブで区切りで、複数指定することができます。
        arguments.Length = 0
        arguments.Append("BOOK=VBサンプル.xlsx")

        rtn = put_values(arguments)
        If rtn <> 0 Then
            error_mesg(arguments)
            Console.WriteLine(arguments.ToString)
            scrap_book()
            Console.WriteLine("終了するには何かキーを押してください。")
            Console.ReadKey()
            Environment.Exit(-1)
        End If

        ' 列幅設定
        arguments.Length = 0
        arguments.Append("B.幅=20 C.幅=20 D.幅=20 E.幅=20")

        rtn = put_values(arguments)
        If rtn <> 0 Then
            error_mesg(arguments)
            Console.WriteLine(arguments.ToString)
            scrap_book()
            Console.WriteLine("終了するには何かキーを押してください。")
            Console.ReadKey()
            Environment.Exit(-1)
        End If

        line_ct = 0
        max_row = 10
        now_date = System.DateTime.Now.ToString("yyyy/MM/dd")

        ' 行数繰り返し
        For row = 1 To max_row

            ' A...E列に数値、文字、日付を設定
            cell_name(cell1, row, 1)
            cell_name(cell2, row, 2)
            cell_name(cell3, row, 3)
            cell_name(cell4, row, 4)
            cell_name(cell5, row, 5)
            line_ct = line_ct + 1
        
            values = cell1.ToString + "=" + row.ToString() + " " + cell2.ToString() + "=日本語文字列" + row.ToString() + " " + cell2.ToString() + ".フォント.色=赤 " _
            + cell3.ToString() + "=" + now_date + " " + cell3.ToString() + ".書式=和暦 " + cell4.ToString() + "=ABCDEFG " + cell4.ToString() + ".フォント.名=""Arial Black"" " _
            + cell5.ToString() + "=12345 " + cell5.ToString() + ".書式=漢数字"
            arguments.Length = 0
            arguments.Append(values)

            rtn = put_values(arguments)
            If rtn <> 0 Then
                error_mesg(arguments)
                Console.WriteLine(arguments.ToString)
                scrap_book()
                Console.WriteLine("終了するには何かキーを押してください。")
                Console.ReadKey()
                Environment.Exit(-1)
            End If

            ' 偶数行を塗りつぶす
            If line_ct Mod 2 = 0 Then

                cell_range(range, row, 1, row, 5)
                values = range.ToString() + ".塗りつぶし.色=#CCCCCC"
                arguments.Length = 0
                arguments.Append(values)

                rtn = put_values(arguments)
                If rtn <> 0 Then
                    error_mesg(arguments)
                    Console.WriteLine(arguments.ToString)
                    scrap_book()
                    Console.WriteLine("終了するには何かキーを押してください。")
                    Console.ReadKey()
                    Environment.Exit(-1)
                End If
            End If
        Next

        ' 表全体に罫線を付ける
        cell_range(range, 1, 1, max_row, 5)
        values = range.ToString() + ".罫線=実線"
        arguments.Length = 0
        arguments.Append(values)

        rtn = put_values(arguments)
        If rtn <> 0 Then
            error_mesg(arguments)
            Console.WriteLine(arguments.ToString)
            scrap_book()
            Console.WriteLine("終了するには何かキーを押してください。")
            Console.ReadKey()
            Environment.Exit(-1)
        End If

        ' Excelブック保存
        rtn = save_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()
    End Sub

End Module

	


解説
ブックメモリの確保

        ' Excelブックオープン
        ' 処理を終了する際には、save_book関数(保存して正常終了)またはscrap_book関数(メモリ破棄)をCALLする必要があります。
        ' scrap_book関数をCALLしない場合はメモリリークが起こります。
        rtn = open_book()
        If rtn <> 0 Then
            Console.WriteLine("ERROR:open_book()")
            Environment.Exit(-1)
        End If

	
open_book関数を使い、ブックメモリの確保を行います。
処理の終了時にはsave_book関数またはscrap_book関数でメモリを解放する必要があります。

値/属性の設定

        ' 列幅設定
        arguments.Length = 0
        arguments.Append("B.幅=20 C.幅=20 D.幅=20 E.幅=20")

        rtn = put_values(arguments)
        If rtn <> 0 Then
            error_mesg(arguments)
            Console.WriteLine(arguments.ToString)
            scrap_book()
            Console.WriteLine("終了するには何かキーを押してください。")
            Console.ReadKey()
            Environment.Exit(-1)
        End If

	
put_values関数を使い、ブック名やシート名、セルの値、各種書式の設定を行います。
設定はセル名=値 または 属性名=値 の文字列を羅列した形式で行います。
使用できる属性の詳細は、マニュアルを参照してください。
エラーが発生した場合は、戻り値として0以外が返却されます。
error_code関数でエラーコードを、error_mesg関数でエラーメッセージを取得することができます。
異常終了する場合は、scrap_book関数でメモリの解放を行ってください。

ブックの保存
        ' Excelブック保存
        rtn = save_book()
        If rtn <> 0 Then
            error_mesg(arguments)
            Console.WriteLine(arguments.ToString)
            scrap_book()
            Environment.Exit(-1)
        End If

	
save_book関数を使い、ブックの保存を行います。
ブック名を指定していない場合は、「Book1.xlsx」で保存します。
保存が正常終了するとブック用に確保したメモリは解放されていますので、 以降はX-TRAiNの関数を呼び出さないでください。