- Home ›
- Apache POIでExcelを操作 ›
- セル ›
- HERE
ハイパーリンクの設定
セルに対してハイパーリンクを設定するにはいくつかの手順が必要となります。
1. CreationHelperインターフェースを実装したクラスのオブジェクトを作成する 2. Hyperlinkインターフェースを実装したクラスのオブジェクトを作成する 3. ハイパーリンクのリンク先を設定する 4. セルにハイパーリンクを設定する
ではまずCreationHelperインターフェースを実装したクラスのオブジェクトを作成しましょう。このオブジェクトを作成するにはWorkbookインターフェースで用意されているgetCreationHelperメソッドを使います。
getCreationHelper CreationHelper getCreationHelper()
Returns an object that handles instantiating concrete classes of the various instances one needs for HSSF and XSSF.
メソッドを実行するとCreationHelperインターフェースを実装したクラスのオブジェクトを取得できます。
次にCreationHelperインターフェースを実装したクラスのオブジェクトを使ってHyperlinkインターフェースを実装したクラスのオブジェクトを作成します。CreationHelperインターフェースで用意されているcreateHyperlinkメソッドを使います。
createHyperlink Hyperlink createHyperlink(int type)
Creates a new Hyperlink, of the given type
引数にはハイパーリンクのタイプを表すint型の値を指定します。指定可能な値はorg.apache.poi.ss.usermodel.Hyperlinkインターフェースが継承しているorg.apache.poi.common.usermodel.Hyperlinkインターフェースで定義されています。
Hyperlink.LINK_DOCUMENT Hyperlink.LINK_EMAIL Hyperlink.LINK_FILE Hyperlink.LINK_URL
実際の使い方は次のようになります。
Workbook wb = new HSSFWorkbook(); CreationHelper ch = wb.getCreationHelper(); Hyperlink link = ch.createHyperlink(Hyperlink.LINK_URL);
Hyperlinkインターフェースを実装したクラスのオブジェクトを作成したら、ハイパーリンクのタイプに合わせてリンク先を設定します。リンク先を指定するにはHyperlinkインターフェースで用意されているsetAddressメソッドを使います。
setAddress void setAddress(java.lang.String address)
Hypelink address. Depending on the hyperlink type it can be URL, e-mail, patrh to a file, etc. Parameters: address - the address of this hyperlink
引数にはリンク先を表す文字列を指定します。ハイパーリンクのタイプに応じて記述方法が異なりますが、例えば次のように記述します。
LINK_DOCUMENT => "Sheet0!A1" LINK_EMAIL => "mailto:user@example.jp" LINK_FILE => "sample.xls" LINK_URL => "http://www.example.jp/"
最後にセルに対してハイパーリンクを設定します。Cellインターフェースで用意されているsetHyperlinkメソッドを使います。
setHyperlink void setHyperlink(Hyperlink link)
Assign a hypelrink to this cell Parameters: link - hypelrink associated with this cell
引数には事前に作成しておいたHyperlinkインターフェースを実装したクラスのオブジェクトを指定します。
実際の使い方は次のようになります。
Workbook wb = new HSSFWorkbook();
CreationHelper ch = wb.getCreationHelper();
Hyperlink link = ch.createHyperlink(Hyperlink.LINK_URL);
link.setAddress("http://www.example.jp/");
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue(123);
cell.setHyperlink(link);
この場合は、セルに対してURLリンクを設定しています。
アンダーラインの設定
セルにハイパーリンクを設定するだけならここまでの手順でいいのですが、ハイパーリンクを設定しても見た目上は変化がないためリンクが設定されていることが分かりにくいです。その為、必要であればハイパーリンクを設定すると同時にアンダーラインを表すスタイルを作成し、セルにスタイルを設定して下さい。(フォントに関するスタイルを設定する方法は「フォントの設定」を参照してください)。
実際の使い方は次のようになります。
Workbook wb = new HSSFWorkbook();
CreationHelper ch = wb.getCreationHelper();
Hyperlink link = ch.createHyperlink(Hyperlink.LINK_URL);
link.setAddress("http://www.example.jp/");
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue(123);
cell.setHyperlink(link);
CellStyle style = wb.createCellStyle();
Font font = wb.createFont();
font.setUnderline(Font.U_SINGLE);
style.setFont(font);
cell.setCellStyle(style);
この場合、ハイパーリンクを設定すると同時にアンダーラインのスタイルをセルに設定しています。
サンプルプログラム
実際に試してみましょう。
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import java.io.*;
public class Sample8_1{
public static void main(String[] args){
Workbook wb = new HSSFWorkbook();
CreationHelper ch = wb.getCreationHelper();
Hyperlink link1 = ch.createHyperlink(Hyperlink.LINK_URL);
link1.setAddress("http://www.example.jp/");
Hyperlink link2 = ch.createHyperlink(Hyperlink.LINK_DOCUMENT);
link2.setAddress("Sheet0!A1");
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(1);
Cell cell1 = row.createCell(1);
Cell cell2 = row.createCell(2);
cell1.setCellValue("abc");
cell2.setCellValue("def");
cell1.setHyperlink(link1);
cell2.setHyperlink(link2);
CellStyle style = wb.createCellStyle();
Font font = wb.createFont();
font.setUnderline(Font.U_SINGLE);
style.setFont(font);
cell2.setCellStyle(style);
FileOutputStream out = null;
try{
out = new FileOutputStream("sample8_1.xls");
wb.write(out);
}catch(IOException e){
System.out.println(e.toString());
}finally{
try {
out.close();
}catch(IOException e){
System.out.println(e.toString());
}
}
}
}
列番号1のセルにはURL設定し、列番号2のセルにはドキュメント内へのリンクを設定しました。そのうちの一つにはアンダーラインを設定しています。では作成されたExcelファイルを開いてみます。
どちらのセルにもハイパーリンクが設定されていますが、アンダーラインが表示されていた方がリンクが設定されていることを分かりやすいと思います。
ハイパーリンクが設定されているセルにマウスを合わせるとリンク先の情報が表示されます。
以上です。
( Written by Tatsuo Ikura )
JavaDrive