ブック作成サンプルコード
#
# Ruby X-TRAiN extension demo
# (c) ARKTRAN,INC.
#
require 'date'
require './ruby_xtrain'
printf("処理開始 %s\n", Time.now.instance_eval { '%s.%03d' % [strftime('%Y/%m/%d %H:%M:%S'), (usec / 1000.0).round] });
book_path = 'RubyXTRAiNサンプル'
#
# Excelブックオープン
#
book = AXLS_open_book()
if book.empty? then
printf("AXLS_open_book() ERROR\n");
exit(-1);
end
#
# ブック名指定
#
argument = "BOOK=" + book_path + ' SHEET=SAMPLE';
rtn = AXLS_put_values(book, argument);
if rtn != 0 then
error_code = AXLS_error_code(book);
error_mesg = AXLS_error_mesg(book);
printf("AXLS_put_values() ERROR code=%d message=%s\n", error_code, error_mesg);
AXLS_scrap_book(book);
exit(-1);
end
#
# 列幅設定
#
argument = 'B.幅=20 C.幅=20 D.幅=20 E.幅=20'
rtn = AXLS_put_values(book, argument);
if rtn != 0 then
error_code = AXLS_error_code(book);
error_mesg = AXLS_error_mesg(book);
printf("AXLS_put_values() ERROR code=%d message=%s\n", error_code, error_mesg);
AXLS_scrap_book(book);
exit(-1);
end
now_date= Date.today;
line_ct = 0;
max_row = 1000;
#
# 行数繰り返し
#
for row in 1..max_row do
#
# A〜E列に数値、文字、日付を設定
#
cell1 = AXLS_cell_name(row, 1);
cell2 = AXLS_cell_name(row, 2);
cell3 = AXLS_cell_name(row, 3);
cell4 = AXLS_cell_name(row, 4);
cell5 = AXLS_cell_name(row, 5);
line_ct = line_ct + 1;
argument = cell1 + '=' + row.to_s + ' ' + cell2 + '=日本語文字列' + row.to_s + ' ' + cell2 + '.フォント.色=赤 ' + cell3 + '=' + now_date.to_s + ' ' + cell3 + '.書式=和暦 ' + cell4 + '=ABCDEFG ' + cell4 + '.フォント.名="Arial Black" ' + cell5 + '=12345 ' + cell5 + '.書式=漢数字'
rtn = AXLS_put_values(book, argument);
if rtn != 0 then
error_code = AXLS_error_code(book);
error_mesg = AXLS_error_mesg(book);
printf("AXLS_put_values() ERROR code=%d message=%s\n", error_code, error_mesg);
AXLS_scrap_book(book);
exit(-1);
end
#
# 偶数行を塗りつぶす
#
if line_ct % 2 == 0 then
range = AXLS_cell_range(row, 1, row, 5);
argument = range + ".塗りつぶし.色=銀";
rtn = AXLS_put_values(book, argument);
if rtn != 0 then
error_code = AXLS_error_code(book);
error_mesg = AXLS_error_mesg(book);
printf("AXLS_put_values() ERROR code=%d message=%s\n", error_code, error_mesg);
AXLS_scrap_book(book);
exit(-1);
end
end
end
#
# 表全体に罫線を付ける
#
range = AXLS_cell_range(1, 1, max_row, 5)
argument = range + ".罫線=実線";
rtn = AXLS_put_values(book, argument);
if rtn != 0 then
error_code = AXLS_error_code(book);
error_mesg = AXLS_error_mesg(book);
printf("AXLS_put_values() ERROR code=%d message=%s\n", error_code, error_mesg);
AXLS_scrap_book(book);
exit(-1);
end
#
# Excelブック保存
#
rtn = AXLS_save_book(book);
if rtn != 0 then
error_code = AXLS_error_code(book);
error_mesg = AXLS_error_mesg(book);
printf("AXLS_save_book() ERROR code=%d message=%s\n", error_code, error_mesg);
AXLS_scrap_book(book);
exit(-1);
end
printf("Excelブック " + book_path + " 作成完了\n");
printf("処理終了 %s\n", Time.now.instance_eval { '%s.%03d' % [strftime('%Y/%m/%d %H:%M:%S'), (usec / 1000.0).round] });
解説
ブックオブジェクトの作成
#
# Excelブックオープン
#
book = AXLS_open_book()
if book.empty? then
printf("AXLS_open_book() ERROR\n");
exit(-1);
end
AXLS_open_book関数を使い、ブックオブジェクトを生成します。
オブジェクトの実体は、DLL/共有ライブラリ内に確保された、X-TRAiN用構造体の
アドレスを16進数に変換した文字列です。
以降の関数呼び出し時には、この値を使用します。
処理の終了時にはAXLS_save_book関数またはAXLS_scrap_book関数でメモリを解放する必要があります。
メモリを確保せきなかった場合は戻り値としてNULLが返却されますので、
エラー処理ではX-TRAiNの関数(AXLS〜)を呼び出さないでください。
値/属性の設定
#
# 列幅設定
#
argument = 'B.幅=20 C.幅=20 D.幅=20 E.幅=20'
rtn = AXLS_put_values(book, argument);
if rtn != 0 then
error_code = AXLS_error_code(book);
error_mesg = AXLS_error_mesg(book);
printf("AXLS_put_values() ERROR code=%d message=%s\n", error_code, error_mesg);
AXLS_scrap_book(book);
exit(-1);
end
AXLS_put_values関数を使い、ブック名やシート名、セルの値、各種書式の設定を行います。
設定はセル名=値 または 属性名=値 の様な文字列を羅列した形式で行います。
使用できる属性の詳細は、マニュアルを参照してください。
エラーが発生した場合は、戻り値として0以外が返却されます。
AXLS_error_mesg関数でエラーコードを、AXLS_error_mesg関数でエラーメッセージを取得することができます。
異常終了する場合は、AXLS_scrap_book関数でメモリの解放を行ってください。
ブックの保存
#
# Excelブック保存
#
rtn = AXLS_save_book(book);
if rtn != 0 then
error_code = AXLS_error_code(book);
error_mesg = AXLS_error_mesg(book);
printf("AXLS_save_book() ERROR code=%d message=%s\n", error_code, error_mesg);
AXLS_scrap_book(book);
exit(-1);
end
printf("Excelブック " + book_path + " 作成完了\n");
printf("処理終了 %s\n", Time.now.instance_eval { '%s.%03d' % [strftime('%Y/%m/%d %H:%M:%S'), (usec / 1000.0).round] });
AXLS_save_book関数を使い、ブックの保存を行います。
ブック名を指定していない場合は、「Book1.xlsx」で保存しますが、パスはRubyの
ディレクトリ下になってしまう事に注意してください。
保存が正常終了するとブックオブジェクトは解放されますので、以降は
X-TRAiNの関数(AXLS〜)を呼び出さないでください。