Java jxl APIの概要


きほんそうさ
一、ファイルの作成
「テストデータ.xls」という名前のExcelファイルを生成します.最初のシートは「最初のページ」と名付けられています.効果は以下の通りです.
コード(CreateXLS.java):

//  Excel  
import java.io.*;
import jxl.*;
import jxl.write.*;
public class CreateXLS
{
public static void main(String args[])
{
try
{
//    
WritableWorkbook book=
Workbook.createWorkbook(new File(“  .xls”));
//    “   ”    ,  0       
WritableSheet sheet=book.createSheet(“   ”,0);
// Label                     (0,0)
//        test
Label label=new Label(0,0,”test”);
//               
sheet.addCell(label);
/*            
    Number      ,       

jxl.write.Number number = new jxl.write.Number(1,0,789.123);
sheet.addCell(number);
//         
book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}

二、ファイルの読み取り
先ほど作成したExcelファイルを例に、簡単な読み取り操作を行います.プログラムコードは以下の通りです.
プログラムコード

//  Excel  
import java.io.*;
import jxl.*;
public class ReadXLS
{
public static void main(String args[])
{
try
{
Workbook book=
Workbook.getWorkbook(new File(“  .xls”));
//          
Sheet sheet=book.getSheet(0);
//            
Cell cell1=sheet.getCell(0,0);
String result=cell1.getContents();
System.out.println(result);
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}

三、書類の修正
jExcelAPIで既存のExcelファイルを変更したり、Excelファイルを変更したりする場合、ファイルを開く方法が異なる以外は、Excelの作成と同じ操作です.次の例では、作成したExcelファイルにワークシートを追加します.

//  Excel  ,       
import java.io.*;
import jxl.*;
import jxl.write.*;
public class UpdateXLS
{
public static void main(String args[])
{
try
{
//Excel    
Workbook wb=Workbook.getWorkbook(new File(“  .xls”));
//         ,            
WritableWorkbook book=
Workbook.createWorkbook(new File(“  .xls”),wb);
//       
WritableSheet sheet=book.createSheet(“   ”,1);
sheet.addCell(new Label(0,0,”        ”));
book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}

高度な操作
一、データフォーマット
Excelでは複雑なデータ型には触れず、文字列や数字、日付をうまく処理できるのが一般的なアプリケーションです.
1、文字列の書式設定
文字列のフォーマットは、主にWritableFontクラスとWritableCellFormatクラスが担当するフォント、太さ、文字数などの要素に関連しています.文字列を含むセルを生成するときに、次の文を使用して、説明を容易にするために、各行のコマンドに番号を付けたとします.

WritableFont font1=
new WritableFont(WritableFont.TIMES,16,WritableFont.BOLD);  //       excel      WritableFont font3=new WritableFont(WritableFont.createFont("   _GB2312"),12,WritableFont.NO_BOLD );① WritableCellFormat format1=new WritableCellFormat(font1); ② Label label=new Label(0,0,”data 4 test”,format1) ③   ①       :   TIMES,  16,    。WritableFont         ,        ,jExcelAPI  java-doc      ,      。 ②      WritableCellFormat ,       ,               ,                。 ③    Label     ,            。 WritableCellFormat  ,                    ,           ,    :

//            

format1.setAlignment(jxl.format.Alignment.CENTRE);

//            

format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);

//      
format1.setWrap(true);

二、セル操作
Excelの重要な部分は、行の高さ、列の幅、セルのマージなど、セルの操作です.幸いなことに、jExcelAPIはこれらのサポートを提供しています.これらの操作は比較的簡単で,以下では関連するAPIについてのみ説明する.
1、セルの結合
WritableSheet.mergeCells(int m,int n,int p,int q);
役割は、(m,n)から(p,q)までのセルをすべて結合することです.たとえば、次のようにします.
WritableSheet sheet=book.createSheet("1ページ目",0);
//最初の列の最初の行から6番目の列の最初の行までのすべてのセルをマージ
sheet.mergeCells(0,0,5,0);
マージは横でも縦でもかまいません.連結後のセルは再連結できません.そうしないと、例外がトリガーされます.
2、行の高さと列の幅
WritableSheet.setRowView(int i,int height);
役割は、i+1行目の高さを指定することです.たとえば、次のようにします.
//1行目の高さを200にする
sheet.setRowView(0,200);
WritableSheet.setColumnView(int i,int width);
次のように、i+1列目の幅を指定します.
//1列目の幅を30にする
sheet.setColumnView(0,30);
三、操作画像
public static void write()throws Exception{
         WritableWorkbook wwb=Workbook.createWorkbook(new File("c:/1.xls"));
         WritableSheet ws=wwb.createSheet("Test Sheet 1",0);
         File file=new File("C:\\jbproject\\PVS\\WebRoot\\weekhit\\1109496996281.png");
         WritableImage image=new WritableImage(1, 4, 6, 18,file);
         ws.addImage(image);
         wwb.write();
         wwb.close();
     }
簡単にセルを挿入する方法と同じですが、パラメータが多いので、WritableImageというクラスはDrawを継承しています.上は彼の構造方法の一つにすぎません.最後のパラメータは言うまでもなく、前の4つのパラメータのタイプはdoubleで、x、y、width、heightの順です.ここの幅と高さは画像の幅と高さではなく、画像が占める単位です.格の個数は、受け継がれたDrawなので彼のタイプはdoubleでなければならないのですが、具体的にはどうやって実現するのか私はまだ詳しく見ていません:)急いで仕事をして、先に機能を完成して、その他は後でゆっくり研究する時間があります.後で使用中の心得を書き続けます.
   読み取り:
読むときは、まず入力ストリーム(InputStream)でExcelファイルを入手し、jxlのWorkbookでワークシートを入手し、Sheetでワークシートからワークシートを入手し、Cellでワークシートのセルを入手するという考え方です.
InputStream->Workbook->Sheet->Cell、excelファイルのセルを取得

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の座標対応を得ることができる.
例えばA 1対応(0,0)、A 2対応(0,1)、D 3対応(3,2).Excelにおける座標はA,1から、jxlにおける全ては0から始まる.
また、SheetのgetRows()、getColumns()メソッドにより行数列数を得る、ループ制御に用いて、1つのsheetのすべての内容を出力することもできる.
書き込み:
Excelへの書き込み内容は主にjxl.writeパッケージのクラスである.
考え方はこうです.
OutputStream<-WritableWorkbook<-WritableSheet<-Label
この中のLabelはSheetに書き込まれたCellの位置と内容を表しています.

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  sheet 
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の新しい表に書き込むことができて、やはり比較的に便利です.
次に、プログラムの一例を示します.

sql = "select * from tablename";
     rs = stmt.executeQuery(sql);

//  Excel  
String filePath=request.getRealPath("aaa.xls");
File myFilePath=new File(filePath);
if(!myFilePath.exists())
myFilePath.createNewFile();
FileWriter resultFile=new FileWriter(myFilePath);
PrintWriter myFile=new PrintWriter(resultFile);
resultFile.close();

         // JXL           
     OutputStream outf = new 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(Exception e){e.printStackTrace();}
finally{

rs.close();
conn.close();
}

response.sendRedirect("aaa.xls");