ブック作成サンプルコード
//
// ARK X-TRAiN for Java サンプルプログラム
//
// JavaプログラムからJNA(Java Native Interface)の機能でX-TRAiNの関数をCALLして、
// エクセルブックを作成するサンプルです。
//
// 実行にはjna.jarが必要です。https://github.com/java-native-access/jna
//
// 出力先は定数BOOK_PATHでフルパス指定する必要があります。
//
// コンパイル
// # javac -cp jna.jar JNA_xtrain.java
//
// 実行
// # java -classpath .;jna.jar JNA_xtrain
//
// (c) ARKTRAN,INC.
//
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
import java.util.Calendar;
import java.text.SimpleDateFormat;
class JNA_xtrain{
public static final String BOOK_PATH = "C:\\TEMP\\Java_SAMPLE.xlsx"; // 出力ブックのパス
public interface JxlsLib extends Library {
// X-TRAiN
JxlsLib INSTANCE = (JxlsLib) Native.loadLibrary(Platform.isWindows() ? "axls_api" : "axls_api", JxlsLib.class);
// X-TRAiN java用関数
String open_book();
int open_sheet(String book, String sheet);
int put_cell(String book, String cell, String value);
int put_values(String book, String values);
String cell_name(String book, int row, int column);
String cell_range(String book, int row1, int column1, int row2, int column2);
int save_book(String book);
int scrap_book(String book);
int error_code(String book);
String error_mesg(String book);
}
public static void main(String[] args){
int rc;
JxlsLib JXLS = JxlsLib.INSTANCE;
// 開始ログ出力
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 E曜日");
sdf.applyPattern("yyyy/MM/dd HH:mm:ss SSS");
System.out.printf("処理開始 %s\n", sdf.format(c.getTime()));
// Excelブックオープン
// 戻り値にブック用構造体アドレスが文字列として返されますので、以降の処理で使用します。
// 処理を終了する際は、save_book関数(保存して正常終了)またはscrap_book関数(メモリ破棄)をCALLする必要があります。
// scrap_book関数をCALLしない場合はメモリリークが起こります
String book = JXLS.open_book();
if (book == null || book.length() == 0){
System.out.printf("ERROR:JXLS.open_book()");
System.exit(-1);
}
// シートオープン
String arguments = "SHEET_NAME=Javaサンプル MODE=CREATE";
if (JXLS.open_sheet(book, arguments) != 0){
String error_mesg = JXLS.error_mesg(book);
JXLS.scrap_book(book);
System.out.println(error_mesg);
System.exit(-1);
}
// ブック名設定
// 値や属性の設定はput_values関数に、項目=項目値 の形式の引数で指定します。
// 空白またはタブで区切り、複数指定することができます。
arguments = "BOOK=" + BOOK_PATH;
rc = JXLS.put_values(book, arguments);
if (rc != 0){
String error_mesg = JXLS.error_mesg(book);
JXLS.scrap_book(book);
System.out.printf("ERROR:JXLS.put_values() rc=%d %s\n", rc, error_mesg);
System.exit(-1);
}
// 列幅設定
arguments = "B.幅=20 C.幅=20 D.幅=20 E.幅=20";
rc = JXLS.put_values(book, arguments);
if (rc != 0){
String error_mesg = JXLS.error_mesg(book);
JXLS.scrap_book(book);
System.out.printf("ERROR:JXLS.open_book() rc=%d %s\n", rc, error_mesg);
System.exit(-1);
}
sdf.applyPattern("yyyy/MM/dd");
String now_date = sdf.format(c.getTime());
int line_ct = 0;
int max_row = 1000;
// 行数繰り返し
for (int row=1; row<=max_row; row++){
// A〜E列に数値、文字、日付を設定
int column = 1;
String cell1 = JXLS.cell_name(book, row, 1);
String cell2 = JXLS.cell_name(book, row, 2);
String cell3 = JXLS.cell_name(book, row, 3);
String cell4 = JXLS.cell_name(book, row, 4);
String cell5 = JXLS.cell_name(book, row, 5);
line_ct++;
arguments = cell1 + "=" + row + " " + cell2 + "=日本語文字列" + row + " " + cell2 + ".フォント.色=赤 " + cell3 + "=" + now_date + " " + cell3 + ".書式=和暦 " + cell4 + "=ABCDEFG " + cell4 + ".フォント.名=\"Arial Black\" " + cell5 + "=12345 " + cell5 + ".書式=漢数字";
rc = JXLS.put_values(book, arguments);
if (rc != 0){
String error_mesg = JXLS.error_mesg(book);
JXLS.scrap_book(book);
System.out.printf("ERROR:JXLS.put_values() rc=%d %s\n", rc, error_mesg);
System.exit(-1);
}
// 偶数行を塗りつぶす
if (line_ct % 2 == 0){
String range = JXLS.cell_range(book, row, 1, row, 5);
arguments = range + ".塗りつぶし.色=#CCCCCC";
rc = JXLS.put_values(book, arguments);
if (rc != 0){
String error_mesg = JXLS.error_mesg(book);
JXLS.scrap_book(book);
System.out.printf("ERROR:JXLS.put_values() rc=%d %s\n", rc, error_mesg);
System.exit(-1);
}
}
}
// 表全体に罫線を付ける
String range = JXLS.cell_range(book, 1, 1, max_row, 5);
arguments = range + ".罫線=実線";
rc = JXLS.put_values(book, arguments);
if (rc != 0){
String error_mesg = JXLS.error_mesg(book);
JXLS.scrap_book(book);
System.out.printf("ERROR:JXLS.put_values() rc=%d %s\n", rc, error_mesg);
System.exit(-1);
}
// Excelブック保存
rc = JXLS.save_book(book);
if (rc != 0){
String error_mesg = JXLS.error_mesg(book);
JXLS.scrap_book(book);
System.out.printf("ERROR:JXLS.save_book() rc=%d %s\n", rc, error_mesg);
System.exit(-1);
}
// 終了ログ出力
c = Calendar.getInstance();
sdf = new SimpleDateFormat("yyyy年MM月dd日 E曜日");
sdf.applyPattern("yyyy/MM/dd HH:mm:ss SSS");
System.out.printf("処理終了 %s\n", sdf.format(c.getTime()));
System.out.printf("Excelブック%sを出力しました。\n", BOOK_PATH);
}
}
解説
ライブラリの宣言
// X-TRAiN
JxlsLib INSTANCE = (JxlsLib) Native.loadLibrary(Platform.isWindows() ? "axls_api" : "axls_api", JxlsLib.class);
// X-TRAiN java用関数
String open_book();
int open_sheet(String book, String sheet);
int put_cell(String book, String cell, String value);
int put_values(String book, String values);
String cell_name(String book, int row, int column);
String cell_range(String book, int row1, int column1, int row2, int column2);
int save_book(String book);
int scrap_book(String book);
int error_code(String book);
String error_mesg(String book);
}
X-TRAiNのDLL/共有ライブラリをロードして、使用する関数を宣言します。
ブックオブジェクトの作成
// Excelブックオープン
// 戻り値にブック用構造体アドレスが文字列として返されますので、以降の処理で使用します。
// 処理を終了する際は、save_book関数(保存して正常終了)またはscrap_book関数(メモリ破棄)をCALLする必要があります。
// scrap_book関数をCALLしない場合はメモリリークが起こります
String book = JXLS.open_book();
if (book == null || book.length() == 0){
System.out.printf("ERROR:JXLS.open_book()");
System.exit(-1);
}
open_book関数を使い、ブックオブジェクトを生成します。
オブジェクトの実体は、DLL/共有ライブラリ内に確保された、X-TRAiN用構造体の
アドレスを16進数に変換した文字列です。
以降の関数呼び出し時には、この値を使用します。
処理の終了時にはsave_book関数またはscrap_book関数でメモリを
解放する必要があります。
メモリを確保せきなかった場合は戻り値としてNULLが返却されますので、エラー処理では
X-TRAiNの関数を呼び出さないでください。
値/属性の設定
// 列幅設定
arguments = "B.幅=20 C.幅=20 D.幅=20 E.幅=20";
rc = JXLS.put_values(book, arguments);
if (rc != 0){
String error_mesg = JXLS.error_mesg(book);
JXLS.scrap_book(book);
System.out.printf("ERROR:JXLS.open_book() rc=%d %s\n", rc, error_mesg);
System.exit(-1);
}
put_values関数を使い、ブック名やシート名、セルの値、各種書式の設定を行います。
設定はセル名=値 または 属性名=値 の様な文字列を羅列した形式で行います。
使用できる属性の詳細は、マニュアルを参照してください。
エラーが発生した場合は、戻り値として0以外が返却されます。
error_mesg関数でエラーメッセージを取得することができます。
異常終了する場合は、scrap_book関数でメモリの解放を行ってください。
ブックの保存
// Excelブック保存
rc = JXLS.save_book(book);
if (rc != 0){
String error_mesg = JXLS.error_mesg(book);
JXLS.scrap_book(book);
System.out.printf("ERROR:JXLS.save_book() rc=%d %s\n", rc, error_mesg);
System.exit(-1);
}
save_book関数を使い、ブックの保存を行います。
ブック名を指定していない場合は、「Book1.xlsx」で保存しますが、パスはPHPの
ディレクトリ下になってしまう事に注意してください。
保存が正常終了するとブックオブジェクトは解放されますので、以降は
X-TRAiNの関数を呼び出さないでください。