Java Excelのインポートおよびエクスポート操作(jxl)
JavaはExcelデータを解釈します(jxl.jarパッケージの使用)
キーワード: Java Excel jxl.jar
jxl.jar パッケージのダウンロード アドレス:
http://www.andykhan.com/jexcelapi/
実際のダウンロード アドレス:
http://www.andykhan.com/jexcelapi/download.html
その特徴はWebサイトでは次のように説明されています。
● Excel 95 ~ 2000 のすべてのバージョンをサポート ● Excel 2000 の標準形式を生成 ● フォント、数値、および日付の操作をサポート ● セルの属性を変更できる ● 画像とグラフをサポート 上記の機能は、ほぼニーズを満たしていると言えます。最も重要なことは、この API は純粋な Java であり、Windows システムに依存しないことです。Linux 上で実行されている場合でも、Excel ファイルを正しく処理できます。この API セットはグラフィックスとチャートのサポートが非常に限られており、PNG 形式のみを認識することにも注意してください。
環境構築は、ダウンロードしたファイルを解凍してjxl.jarを取得し、クラスパスに配置すればインストールは完了です。
基本操作
1. ファイルを作成して、「Test Data.xls」という名前の Excel ファイルを生成します。このファイルでは、最初のワークシートに「First Page」という名前が付けられます。
Javaコード
/*
※2007年12月30日作成
*
* この生成されたファイルのテンプレートを変更するには、次の場所に移動します。
* ウィンドウ>設定>Java>コード生成>コードとコメント
*/
パッケージ JExcelTest.standard;
java.io.* をインポートします。
jxl.* をインポートします。
インポート jxl.write.*;
/**
* @著者ケン
*
* この生成されたタイプ コメントのテンプレートを変更するには、次の場所に移動します。
* ウィンドウ>設定>Java>コード生成>コードとコメント
*/
パブリック クラス CreateXLS {
public static void main(String[] args) {
試す {
// ファイルを開きます。
WritableWorkbook book = Workbook.createWorkbook(new File("d:/Test.xls"));
//「Sheet_1」という名前のシートを作成します。0 はこれが 1 ページ目であることを意味します。
WritableSheet シート = book.createSheet("Sheet_1", 0);
//Label Constructor でセルの列と行を定義し、セルの内容を「test」と書き込みます。
//セルは1列目、1行目の値は「test」です。
ラベル label = 新しいラベル(0, 0, "テスト");
// 上に定義されたセルをシート インスタンスに追加します。
シート.addCell(ラベル);
//add numeric を使用してセルを作成します。警告: 統合されたパッケージ パスを使用する必要があります。そうでない場合はパス エラーがスローされます。
// セルは 2 列目、1 行目の値は 789.123 です。
jxl.write.Number 数値 = 新しい jxl.write.Number(1, 0, 789.123);
// 上に定義されたセルをシート インスタンスに追加します。
シート.addCell(数値);
// 定義されている上記のすべてのセルを case に追加します。
book.write();
// ファイルケースを閉じます。
book.close();
} catch (例外 e) {
e.printStackTrace();
}
}
}
Java がコンパイルされて実行されると、現在の場所に Excel ファイルが生成されます。
2. ファイルを読み込みます。先ほど作成した Excel ファイルを例として、簡単な読み込み操作を実行します。プログラム コードは次のとおりです。
Javaコード
/*
※2007年12月30日作成
*
* この生成されたファイルのテンプレートを変更するには、次の場所に移動します。
* ウィンドウ>設定>Java>コード生成>コードとコメント
*/
パッケージ JExcelTest.standard;
java.io.* をインポートします。
jxl.* をインポートします。
/**
* @著者ケン
*
* この生成されたタイプ コメントのテンプレートを変更するには、次の場所に移動します。
* ウィンドウ>設定>Java>コード生成>コードとコメント
*/
パブリック クラス ReadXLS {
public static void main(String[] args) {
試す {
ワークブック book = Workbook.getWorkbook(new File("d:/Test.xls"));
// Sheet オブジェクトを取得します。
シートsheet = book.getSheet(0);
// 1 列目、1 行目のコンテンツを取得します。
セルセル =sheet.getCell(0, 0);
文字列結果 = cell.getContents();
System.out.println(結果);
book.close();
} catch (例外 e) {
e.printStackTrace();
}
}
}
プログラム実行結果:テスト
3. ファイルの変更 jExcelAPI を使用して既存の Excel ファイルを変更できます。Excel ファイルを変更する場合、ファイルを開く方法が異なることを除けば、その他の操作は Excel の作成と同じです。次の例では、生成した Excel ファイルにワークシートを追加します。
Excel クラスを変更してワークシートを追加する
Javaコード
/*
※2007年12月30日作成
*
* この生成されたファイルのテンプレートを変更するには、次の場所に移動します。
* ウィンドウ>設定>Java>コード生成>コードとコメント
*/
パッケージ JExcelTest.standard;
java.io.* をインポートします。
jxl.* をインポートします。
インポート jxl.write.*;
/**
* @著者ケン
*
* この生成されたタイプ コメントのテンプレートを変更するには、次の場所に移動します。
* ウィンドウ>設定>Java>コード生成>コードとコメント
*/
パブリック クラス UpdateXLS {
public static void main(String[] args) {
試す {
//ファイルを取得します。
ワークブック wb = Workbook.getWorkbook(new File("d:/Test.xls"));
//コピーファイル(新規ファイル)を開いて、Test.xlsに同じ内容を書き込みます。
WriteableWorkbook ブック =
Workbook.createWorkbook(new File("d:/Test.xls"), wb);
//シートを追加します。
WritableSheet シート = book.createSheet("Sheet_2", 1);
sheet.addCell(new Label(0, 0, "test2"));
book.write();
book.close();
} catch (例外 e) {
e.printStackTrace();
}
}
}
高度な操作
1. Excel のデータ形式には複雑なデータ型は含まれておらず、文字列、数値、日付を比較的適切に処理できるため、一般的なアプリケーションには十分です。
文字列の書式設定 文字列の書式設定には、フォント、太さ、フォント サイズなどの要素が含まれます。これらの関数は主に WritableFont クラスと WritableCellFormat クラスを担当します。説明の便宜上、文字列を含むセルを生成するときに次のステートメントを使用するとします。コマンドの各行に番号を付けます。
WritableFont font1= 新しい WritableFont(WritableFont.TIMES,16,WritableFont.BOLD);
または
//フォント形式をExcelでサポートされている形式に設定します
WritableFont font3=new WritableFont(WritableFont.createFont("楷体_GB2312"),12,WritableFont.NO_BOLD );
① WritableCellFormat format1=new WritableCellFormat(font1);
② ラベル label=new Label(0,0,”データ 4 テスト”,format1)
③その中には
I. 文字列形式が指定されています。フォントは TIMES、フォント サイズは 16、太字で表示されます。 WritableFont には、さまざまな状況で使用できる非常に豊富なコンストラクターのセットが含まれています。詳細なリストは jExcelAPI の java-doc にありますが、ここではリストされません。
II. 上記のコードでは、WritableCellFormat クラスを使用します。このクラスを使用して、セルのさまざまな属性を指定できます。
III. Label クラスのコンストラクターは、文字列が与えられる形式を指定するために使用されます。 WritableCellFormat クラスでは、データの配置を指定するもう 1 つの非常に重要なメソッドが挙げられます。たとえば、上記の例では、次のように指定できます。
//水平方向の配置を中央揃えに指定します
format1.setAlignment(jxl.format.Alignment.CENTRE);
//垂直方向の配置を中央揃えに指定します
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
//自動行折り返しを設定する
format1.setWrap(true);
2. セルの操作
Excel の非常に重要な部分は、行の高さ、列の幅、セルの結合などのセルの操作です。幸いなことに、jExcelAPI はこれらのサポートを提供します。これらの操作は比較的単純なので、関連する API のみを以下に紹介します。
1. セルを結合する
WritableSheet.mergeCells(int m,int n,int p,int q);
この関数は、(m,n) から (p,q) までのすべてのセルを結合することです。例:
WritableSheetsheet=book.createSheet("最初のページ",0);
// 1 列目の 1 行目から 6 列目の 1 行目までのすべてのセルを結合します
sheet.mergeCells(0,0,5,0);
マージは水平方向または垂直方向のいずれかで行うことができます。結合されたセルを再度結合することはできません。結合しないと例外がトリガーされます。
2. 行の高さと列の幅
WritableSheet.setRowView(int i,int height);
この関数は、i+1 行目の高さを指定するものです。例:
//最初の行の高さを200に設定します
シート.setRowView(0,200);
WritableSheet.setColumnView(int i,int width);
その機能は、列 i+1 の幅を指定することです。例:
//最初の列の幅を 30 に設定します
シート.setColumnView(0,30);
3. 動作写真
Javaコード
public static void write()throws 例外{
WritableWorkbook wwb=Workbook.createWorkbook(new File("c:/1.xls"));
WritableSheet ws=wwb.createSheet("テストシート1",0);
ファイル file=new File("C:\jbproject\PVS\WebRoot\weekhit\1109496996281.png");
WritableImage image=new WritableImage(1, 4, 6, 18,file);
ws.addImage(画像);
wwb.write();
wwb.close();
}
これは非常に単純で、セルを挿入する方法と同じですが、WritableImage クラスは Draw を継承します。言うまでもなく、最後のパラメーターは double 型です。ここでの幅と高さは、画像の幅と高さではなく、画像が占める単位の数であることに注意してください。描画を継承しているため、その型は double である必要があります。実装方法の詳細は調べませんでした:) 急いでいるから、最初に機能を完成させて、後で残りを勉強する時間を取ります。今後も使ってみた感想を書いていきたいと思います。
読む:
読み取り時の考え方は、まず入力ストリーム (InputStream) を使用して Excel ファイルを取得し、次に jxl の Workbook を使用してワークブックを取得し、Sheet を使用してワークブックからワークシートを取得し、Cell を使用してファイルを取得します。ワークシート内の特定の点。
InputStream -> Workbook -> Sheet -> Cell を実行すると、Excel ファイルのセルが取得されます。
Javaコード
String path="c:\excel.xls";//Excel ファイルの URL
InputStream is = new FileInputStream(path);//FileInputStream に書き込みます
jxl.Workbook wb = Workbook.getWorkbook(is); //ワークブックを取得します。
jxl.Sheet st = wb.getSheet(0);//ワークブック内の最初のワークシートを取得します
Cell cell=st.getCell(0,0);//ワークシートの最初のセル(A1)を取得します。
String content=cell.getContents();//getContents() は Cell 内の文字を文字列に変換します
wb.close();//ワークブックを閉じる
is.close();//入力ストリームを閉じる
String path="c:\excel.xls";//Excel ファイルの URL
InputStream is = new FileInputStream(path);//FileInputStream に書き込みます
jxl.Workbook wb = Workbook.getWorkbook(is); //ワークブックを取得します。
jxl.Sheet st = wb.getSheet(0);//ワークブック内の最初のワークシートを取得します
Cell cell=st.getCell(0,0);//ワークシートの最初のセル(A1)を取得します。
String content=cell.getContents();//getContents() は Cell 内の文字を文字列に変換します
wb.close();//ワークブックを閉じる
is.close();//入力ストリームを閉じます。Sheet の getCell(x,y) メソッドを通じて任意のセルを取得できます。x、y は Excel の座標に対応します。
たとえば、A1 は (0,0)、A2 は (0,1)、D3 は (3,2) に対応します。Excel では座標は A,1 から始まりますが、jxl ではすべて 0 から始まります。
Sheet の getRows() および getColumns() メソッドを通じて行と列の数を取得し、ループ制御に使用してシート内のすべてのコンテンツを出力することもできます。
書く:
コンテンツを Excel に書き込むには、主に jxl.write パッケージ内のクラスを使用します。
アイデアは次のとおりです。
OutputStream<-WritableWorkbook<-WritableSheet<-Label
ここでのラベルは、シートに書き込まれるセルの位置と内容を表します。
Javaコード
OutputStream os=new FileOutputStream("c:\test.xls");//出力 Excel ファイル URL
WritableWorkbook wwb = Workbook.createWorkbook(os);//書き込み可能なワークブックを作成する
WritableSheet ws = wwb.createSheet("sheet1", 0);//書き込み可能なワークシートを作成する
Label labelCF=new Label(0, 0, "hello");//書き込み場所と内容を作成
ws.addCell(labelCF);//ラベルをシートに書き込む
Label のコンストラクター Label(int x, int y, String aString) xy は読み取り時の xy を意味し、aString は書き込まれた内容です。
WritableFont wf = new WritableFont(WritableFont.TIMES, 12, WritableFont.BOLD, false);//書き込みフォントを設定します
WritableCellFormat wcfF = new WritableCellFormat(wf);//CellFormat を設定します
Label labelCF=new Label(0, 0, "hello");//書き込み場所、内容、フォーマットを作成
Label の別のコンストラクターである Label(int c, int r, String cont, CellFormat st) は、書き込まれたコンテンツをフォーマットし、フォントやその他の属性を設定できます。
今すぐ書き込めます
wwb.write();
書いたら閉じる
wwb.close();
出力ストリームも閉じます
os.close;
OK、読み取りと書き込みを組み合わせれば、N Excel でデータを読み取り、それを必要な新しい Excel テーブルに書き込むことができ、非常に便利です。
以下はプログラムの例です。
Javaコード
sql = "テーブル名から * を選択";
rs = stmt.executeQuery(sql);
// 新しい Excel ファイルを作成します
文字列 filePath=request.getRealPath("aaa.xls");
ファイル myFilePath=新しいファイル(ファイルパス);
if(!myFilePath.exists())
myFilePath.createNewFile();
FileWriter resultFile=new FileWriter(myFilePath);
PrintWriter myFile=new PrintWriter(resultFile);
resultFile.close();
//JXL を使用して、新しく作成したファイルにコンテンツを追加します
OutputStream outf = 新しい FileOutputStream(filePath);
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(outf);
jxl.write.WritableSheet ws = wwb.createSheet("sheettest", 0);
int i=0;
int j=0;
for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
ws.addCell(new Label(k,0,rs.getMetaData().getColumnName(k+1)));
}
while(rs.next()){
out.println(rs.getMetaData().getColumnCount());
for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
ws.addCell(new Label(k,j+i+1,rs.getString(k+1)));
}
i++;
}
wwb.write();
wwb.close();
}catch(例外 e){e.printStackTrace();}
ついに{
rs.close();
conn.close();
}
response.sendRedirect("aaa.xls");
この記事は CSDN ブログからのものです。転載する場合は出典を明記してください: http://blog.csdn.net/yangf1984/archive/2009/12/28/5088933.aspx