ブック読み込みサンプルコード
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 = 'sample1000.xlsx'
#
# Excelブックオープン
#
book = AXLS_read_book(book_path);
if book.empty? then
printf("AXLS_read_book() ERROR\n");
exit(-1);
end
rtn = AXLS_error_code(book);
if rtn != 0 then
error_mesg = AXLS_error_mesg(book);
printf("AXLS_put_values() ERROR code=%d message=%s\n", rtn, error_mesg);
AXLS_scrap_book(book);
exit(-1);
end
#
# シート数繰り返し
#
for sheet in 0..AXLS_sheet_num(book)-1 do
rtn = AXLS_open_sheet2(book, sheet);
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
printf("[%s]\n", AXLS_sheet_name(book, sheet));
for row in 0..AXLS_row_num(book)-1 do
for clm in 0..AXLS_column_num(book, row)-1 do
cell = AXLS_cell_name(row+1, clm+1);
printf("行%d列%d=%s\n", row, clm, AXLS_get_cell(book, cell));
end
end
end
# Excelブック解放
AXLS_scrap_book(book);
printf("処理終了 %s\n", Time.now.instance_eval { '%s.%03d' % [strftime('%Y/%m/%d %H:%M:%S'), (usec / 1000.0).round] });
解説
読み込みブックオブジェクトの作成
#
# Excelブックオープン
#
book = AXLS_read_book(book_path);
if book.empty? then
printf("AXLS_read_book() ERROR\n");
exit(-1);
end
rtn = AXLS_error_code(book);
if rtn != 0 then
error_mesg = AXLS_error_mesg(book);
printf("AXLS_put_values() ERROR code=%d message=%s\n", rtn, error_mesg);
AXLS_scrap_book(book);
exit(-1);
end
AXLS_read_book関数を使い、ブックオブジェクトを生成します。
オブジェクトの実体は、DLL/共有ライブラリ内に確保された、X-TRAiN用構造体の
アドレスを16進数に変換した文字列です。
以降の関数呼び出し時には、この値を使用します。
エラー時は戻り値としてNULLが返却されますが、これはメモリ確保ができなかった場合のみです。
読み込みエラーの判定は、AXLS_error_code関数でエラーコードを、
AXLS_error_mesg関数でエラーメッセージを取得して行います。
異常終了する場合は、AXLS_scrap_book関数でメモリの解放を行ってください。
セル値の読み込み
#
# シート数繰り返し
#
for sheet in 0..AXLS_sheet_num(book)-1 do
rtn = AXLS_open_sheet2(book, sheet);
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
printf("[%s]\n", AXLS_sheet_name(book, sheet));
for row in 0..AXLS_row_num(book)-1 do
for clm in 0..AXLS_column_num(book, row)-1 do
cell = AXLS_cell_name(row+1, clm+1);
printf("行%d列%d=%s\n", row, clm, AXLS_get_cell(book, cell));
end
end
end
AXLS_sheet_num関数は、シート数を返します。
AXLS_open_sheet2関数は、シートインデックス(連番)に対応したシートにカレントシートを切り替えます。
AXLS_sheet_name関数は、カレントシート名を返します。
AXLS_row_num関数は、カレントシートの行数を返します。
AXLS_column_name関数は、カレントブック内の引数で指定された行のカラム数を返します。
AXLS_get_cell関数は、カレントブック内の引数で指定されたセルの値を文字列として返します。
ブックオブジェクトの解放
# Excelブック解放
AXLS_scrap_book(book);
AXLS_scrap_book関数を使い、ブックオブジェクトのメモリ解放を行います。