倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

PoiBuilder で Quick Guide (19) : ハイパーリンク

今回はハイパーリンク (Hyperlinks) です(一覧)。

Java コード


ハイパーリンクを作成するサンプル。 Hyperlink オブジェクトは以下のように生成します:

  1. CreationHelper オブジェクトを取得する(Workbook オブジェクトより)
  2. CreationHelper#createHyperlink() メソッドによって Hyperlink オブジェクトを生成する
  3. address プロパティにリンク先の URL 等を設定する
  4. セルに Hyperlink オブジェクトをセットする

です。 ハイパーリンクには次の4つのタイプが定義されています:

  • URL (Hyperlink.LINK_URL)
  • カレント・フォルダ上のファイルへのリンク (Hyperlink.LINK_FILE)
  • e-mail へのリンク (Hyperlink.LINK_EMAIL)
  • ドキュメント上のシート、セルへのリンク (Hyperlink.LINK_DOCUMENT)

タイプの指定をするには、CreationHelper オブジェクトから Hyperlink オブジェクトを生成する際に、Hyperlink クラスに定義されている対応する定数を指定します。 詳しくは Java コードを参照のこと:

    Workbook wb = new XSSFWorkbook(); //or new HSSFWorkbook();
    CreationHelper createHelper = wb.getCreationHelper();

    //cell style for hyperlinks
    //by default hypelrinks are blue and underlined
    CellStyle hlink_style = wb.createCellStyle();
    Font hlink_font = wb.createFont();
    hlink_font.setUnderline(Font.U_SINGLE);
    hlink_font.setColor(IndexedColors.BLUE.getIndex());
    hlink_style.setFont(hlink_font);

    Cell cell;
    Sheet sheet = wb.createSheet("Hyperlinks");
    //URL
    cell = sheet.createRow(0).createCell((short)0);
    cell.setCellValue("URL Link");

    Hyperlink link = createHelper.createHyperlink(Hyperlink.LINK_URL);
    link.setAddress("http://poi.apache.org/");
    cell.setHyperlink(link);
    cell.setCellStyle(hlink_style);

    //link to a file in the current directory
    cell = sheet.createRow(1).createCell((short)0);
    cell.setCellValue("File Link");
    link = createHelper.createHyperlink(Hyperlink.LINK_FILE);
    link.setAddress("link1.xls");
    cell.setHyperlink(link);
    cell.setCellStyle(hlink_style);

    //e-mail link
    cell = sheet.createRow(2).createCell((short)0);
    cell.setCellValue("Email Link");
    link = createHelper.createHyperlink(Hyperlink.LINK_EMAIL);
    //note, if subject contains white spaces, make sure they are url-encoded
    link.setAddress("mailto:poi@apache.org?subject=Hyperlinks");
    cell.setHyperlink(link);
    cell.setCellStyle(hlink_style);

    //link to a place in this workbook

    //create a target sheet and cell
    Sheet sheet2 = wb.createSheet("Target Sheet");
    sheet2.createRow(0).createCell((short)0).setCellValue("Target Cell");

    cell = sheet.createRow(3).createCell((short)0);
    cell.setCellValue("Worksheet Link");
    Hyperlink link2 = createHelper.createHyperlink(Hyperlink.LINK_DOCUMENT);
    link2.setAddress("'Target Sheet'!A1");
    cell.setHyperlink(link2);
    cell.setCellStyle(hlink_style);

設定が結構面倒そうですが、実際にハイパーリンク関連の設定をしている箇所はそんなにありません。

PoiBuilder による構築


PoiBuilder でハイパーリンクを生成するには hyperlink ノードを使います。 このノードには Hyperlink クラスに定義されている定数(Hyperlink.LINK_URL など)を値として渡します:

@GrabResolver('http://www5.ocn.ne.jp/~coast/repo/')
@Grab('org.waman.tools:poi-builder:0.0.5')

import org.waman.tools.poi.PoiBuilder

def workbook = new PoiBuilder().workbook{

    def hlinkStyle = cellStyle(font:font(underline:U_SINGLE, color:BLUE))

    sheet('Hyperlinks'){
        // URL
        row(0){
            cell(0, cellValue:'URL Link', cellStyle:hlinkStyle,
                    hyperlink:hyperlink(LINK_URL, address:'http://poi.apache.org/'))
        }

        // カレント・フォルダ上にあるファイルへのリンク
        row(1){
            cell(0, cellValue:'File Link', cellStyle:hlinkStyle,
                    hyperlink:hyperlink(LINK_FILE, address:'link1.xls'))
        }

        // e-mail へのリンク
        row(2){
            cell(0, cellValue:'Email Link', cellStyle:hlinkStyle,
                    hyperlink:hyperlink(LINK_EMAIL, address:'mailto:poi@apache.org?subject=Hyperlinks'))
        }

        // ドキュメント上のシート、セルへのリンク
        row(3){
            cell(0, cellValue:'Worksheet Link', cellStyle:hlinkStyle,
                    hyperlink:hyperlink(LINK_DOCUMENT, address:"'Target Sheet'!A1"))
        }
    }

    sheet('Target Sheet'){
        row(0){
            //  4つ目のリンクのターゲットとなるセル
            cell(0, cellValue:'TargetCell')
        }
    }
}

まぁ、素直な構築ではないでしょうか。

作成されるスプレッドシート





現場で使えるJavaライブラリ

現場で使えるJavaライブラリ


プログラミングGROOVY

プログラミングGROOVY