ハイパーリンクの設定

広告

セルに対してハイパーリンクを設定するにはいくつかの手順が必要となります。

1. CreationHelperインターフェースを実装したクラスのオブジェクトを作成する
2. Hyperlinkインターフェースを実装したクラスのオブジェクトを作成する
3. ハイパーリンクのリンク先を設定する
4. セルにハイパーリンクを設定する

ではまずCreationHelperインターフェースを実装したクラスのオブジェクトを作成しましょう。このオブジェクトを作成するにはWorkbookインターフェースで用意されているgetCreationHelperメソッドを使います。

Returns an object that handles instantiating concrete classes of the various instances 
one needs for HSSF and XSSF. 

メソッドを実行するとCreationHelperインターフェースを実装したクラスのオブジェクトを取得できます。

次にCreationHelperインターフェースを実装したクラスのオブジェクトを使ってHyperlinkインターフェースを実装したクラスのオブジェクトを作成します。CreationHelperインターフェースで用意されているcreateHyperlinkメソッドを使います。

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メソッドを使います。

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メソッドを使います。

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);

この場合、ハイパーリンクを設定すると同時にアンダーラインのスタイルをセルに設定しています。

サンプルプログラム

実際に試してみましょう。

Sample8_1.java

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 )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。