Javaを使ってExcelを操作する方法をずっと勉強したいと思っていたのですが、今日は特にすることがないので少しだけ勉強してまとめてみました。 Java を使用して Excel を操作するには、オープン ソース ツール jxl.jar があり、http://sourceforge.net/projects/jexcelapi/files/ からダウンロードできます。
1. Excelファイルの内容を読み込む
次のようにコードをコピーします。
/** *//**Excel ファイルの内容を読み取ります
* @param file 読み込むファイル
* @戻る
*/
public static String readExcel(File ファイル)...{
StringBuffer sb = new StringBuffer();
ワークブック wb = null;
試す...{
//Workbook オブジェクトを構築する
wb=Workbook.getWorkbook(ファイル);
} catch (BiffException e) ...{
e.printStackTrace();
} catch (IOException e) ...{
e.printStackTrace();
}
if(wb==null)
null を返します。
// Workbook オブジェクトを取得した後、それを通じて Sheet (ワークシート) オブジェクトを取得できます
シート[] シート = wb.getSheets();
if(sheet!=null&&sheet.length>0)...{
//各ワークシートをループします
for(int i=0;i<sheet.length;i++)...{
// 現在のワークシートの行数を取得します
int rowNum = シート[i].getRows();
for(int j=0;j<rowNum;j++)...{
// 現在の行のすべてのセルを取得します
Cell[] セル = シート[i].getRow(j);
if(cells!=null&&cells.length>0)...{
//各セルをループします
for(int k=0;k<cells.length;k++)...{
// 現在のセルの値を読み取る
文字列 cellValue = セル[k].getContents();
sb.append(cellValue+" ");
}
}
sb.append(" ");
}
sb.append(" ");
}
}
//最後にリソースを閉じてメモリを解放します
wb.close();
sb.toString() を返します。
}
2. Excelファイルへの書き込み
ここには、テキスト コンテンツの太字化、特定の色の追加など、さまざまな形式があります。jxl の API を参照できます。
次のようにコードをコピーします。
/**Excel ファイルを生成する
* @param fileName 生成する Excel ファイルの名前
*/
public static void writeExcel(String fileName)...{
WritableWorkbook wwb = null;
試す...{
//まず Workbook クラスのファクトリ メソッドを使用して、書き込み可能なワークブック (Workbook) オブジェクトを作成します
wwb = Workbook.createWorkbook(新しいファイル(ファイル名));
} catch (IOException e) ...{
e.printStackTrace();
}
if(wwb!=null)...{
//書き込み可能なワークシートを作成する
//Workbook の createSheet メソッドには 2 つのパラメータがあります。1 つ目はワークシートの名前で、2 つ目はワークブック内のワークシートの位置です。
WritableSheet ws = wwb.createSheet("sheet1", 0);
//以下にセルの追加を開始します
for(int i=0;i<10;i++)...{
for(int j=0;j<5;j++)...{
//ここで注意する必要があるのは、Excel では、最初のパラメータが列を表し、2 番目のパラメータが行を表すことです。
Label labelC = new Label(j, i, "これは "+(i+1)+" 行、"+(j+1)+" 列です");
試す...{
//生成されたセルをワークシートに追加します
ws.addCell(labelC);
} catch (RowsExceededException e) ...{
e.printStackTrace();
} catch (WriteException e) ...{
e.printStackTrace();
}
}
}
試す...{
//メモリからファイルに書き込みます
wwb.write();
// リソースを閉じてメモリを解放する
wwb.close();
} catch (IOException e) ...{
e.printStackTrace();
} catch (WriteException e) ...{
e.printStackTrace();
}
}
}
注: コンテンツを既存の Excel に書き込む場合は、次の手順を実行する必要があります。
次のようにコードをコピーします。
WritableWorkbook ブック = null;
試す...{
// Excel がファイルを取得します
ワークブック wb = Workbook.getWorkbook(new File("D:/test.xls"));
// ファイルのコピーを開き、指定されたデータを元のファイルに書き戻します
book = Workbook.createWorkbook(new File("D:/test.xls"), wb);
//ワークシートを追加する
WritableSheet シート = book.getSheet("sheet1");
Sheet.addCell(new Label(8,3, "行 3、列 8 に何かが追加されます"));
//TODO 以下の部分は省略
}catch(例外 e)...{
e.printStackTrace();
}
3. Excelファイルに特定のキーワードが含まれているかどうかを確認する
次のようにコードをコピーします。
/** 特定のファイルに特定のキーワードが含まれているかどうかを検索します
* @param file 検索対象のファイル
* @param keyWord 検索するキーワード
* @戻る
*/
public static boolean searchKeyWord(File file,String keyWord)...{
ブール値 re = false;
ワークブック wb = null;
試す...{
//Workbook オブジェクトを構築する
wb=Workbook.getWorkbook(ファイル);
} catch (BiffException e) ...{
応答を返します。
} catch (IOException e) ...{
応答を返します。
}
if(wb==null)
応答を返します。
// Workbook オブジェクトを取得した後、それを通じて Sheet (ワークシート) オブジェクトを取得できます
シート[] シート = wb.getSheets();
ブール値ブレークシート = false;
if(sheet!=null&&sheet.length>0)...{
//各ワークシートをループします
for(int i=0;i<sheet.length;i++)...{
if(ブレークシート)
壊す;
// 現在のワークシートの行数を取得します
int rowNum = シート[i].getRows();
ブール値のbreakRow = false;
for(int j=0;j<rowNum;j++)...{
if(ブレイク行)
壊す;
// 現在の行のすべてのセルを取得します
Cell[] セル = シート[i].getRow(j);
if(cells!=null&&cells.length>0)...{
ブール値のbreakCell = false;
//各セルをループします
for(int k=0;k<cells.length;k++)...{
if(ブレークセル)
壊す;
// 現在のセルの値を読み取る
文字列 cellValue = セル[k].getContents();
if(セル値==null)
続く;
if(cellValue.contains(keyWord))...{
レス = 真;
ブレークセル = true;
ブレーク行 = true;
ブレークシート = true;
}
}
}
}
}
}
//最後にリソースを閉じてメモリを解放します
wb.close();
応答を返します。
}
4. Excelに画像アイコンを挿入する
画像の挿入は簡単です。次のコードを参照してください。
次のようにコードをコピーします。
/** *//**Excel に画像を挿入する
* @param dataSheet 挿入するワークシート
* @param col 画像はこの列から始まります
* @param row 画像はこの行から始まります
* @param width 画像が占める列の数
* @param height 画像が占める行数
* @param imgFile 挿入する画像ファイル
*/
public static void insertImg(WritableSheet dataSheet, intcol, int row, int width,
int 高さ、ファイル imgFile)...{
WritableImage img = new WritableImage(col, row, width, height, imgFile);
dataSheet.addImage(img);
}
上記のコードのコメントはすでに非常に明確なので、おそらくこれ以上説明する必要はありません。次のプログラムで確認できます。
次のようにコードをコピーします。
試す...{
// ワークブックを作成する
WritableWorkbook ワークブック = Workbook.createWorkbook(new File("D:/test1.xls"));
//挿入するワークシート
WritableSheet imgSheet = workbook.createSheet("画像",0);
//挿入する画像ファイル
File imgFile = new File("D:/1.png");
//画像は 2 行目の最初のセルに挿入され、長さと幅がそれぞれ 6 セルを占めます。
insertImg(imgSheet,0,1,6,6,imgFile);
workbook.write();
workbook.close();
} catch (IOException e) ...{
e.printStackTrace();
} catch (WriteException e) ...{
e.printStackTrace();
}
ただし、jxl は png 形式の画像のみをサポートしており、jpg 形式や gif 形式はサポートされていません。
5. ヘッダーとフッターを挿入する
通常、ヘッダーとフッターは左、中央、右の 3 つの部分に分かれています。次のコードを使用してヘッダーとフッターを挿入できます。
次のようにコードをコピーします。
/** *//**Excel にヘッダーとフッターを追加します
* @param dataSheet ヘッダーに追加するワークシート
* @param left
* @パラメータセンター
* @param right
*/
public static void setHeader(WritableSheet dataSheet,String left,String center,String right)...{
HeaderFooter hf = new HeaderFooter();
hf.getLeft().append(left);
hf.getCentre().append(センター);
hf.getRight().append(right);
//ヘッダーを追加
dataSheet.getSettings().setHeader(hf);
//フッターを追加
//dataSheet.getSettings().setFooter(hf);
}
このメソッドは次のコードでテストできます。
次のようにコードをコピーします。
試す...{
// ワークブックを作成する
WritableWorkbook ワークブック = Workbook.createWorkbook(new File("D:/test1.xls"));
//挿入するワークシート
WritableSheet dataSheet = workbook.createSheet("ヘッダーの追加",0);
ExcelUtils.setHeader(dataSheet, "chb", "2007-03-06", "ページ 1/3");
workbook.write();
workbook.close();
} catch (IOException e) ...{
e.printStackTrace();
} catch (WriteException e) ...{
e.printStackTrace();
}